8次发布

0.3.0 2022年8月1日
0.2.0 2021年11月29日
0.1.5 2021年11月6日
0.1.3 2021年10月13日
0.1.0 2021年9月19日

算法中排名1708

每月下载量27

MIT授权MIT

26KB
608

IDHash

IDHash可以高效地为数据集创建一个可识别的散列,该散列独立于行排序但依赖于列排序。IDHash的核心目的是快速识别两个数据集是否相同,而无需它们都在同一台机器上,同时也可以检查如果已知修改,一个数据集是否是另一个数据集的修改版本。

IDHash基于UNFv6,关于UNF的详细信息可以在这里找到,主要区别是UNF是列不变的但行相关的,而IDHash是列相关的但行不变的。

方法缺点

重复识别

由于需要行不变性,一个数据集

    A    B
    1    2
    1    2
    1    2

将产生与相同的散列;

    A    B
    1    2

但不会与相同的散列;

    A    B
    1    2
    1    2

在实践中,这种情况相对不太可能,对于机器学习中的数据集的核心目的来说,这并不是一个主要问题。

预处理

每一列都有根据UNF定义的特定预处理。这主要确保在考虑浮点数epsilon的情况下,浮点值和时间戳(目前IDHash不支持)在数据集之间可以一致地表示。

散列生成

每一行被视为一个单字节流,并使用Murmurhash128进行散列。Murmurhash是一个非加密散列函数,为每个单独的值产生一个分布良好的散列。通过求和单个散列原语,可以生成最终数据集的最终散列,不考虑重复项。

检查相等性 + Delta

由于散列行是通过XOR操作组合在一起以产生最终值,因此也可以通过以相同的方式生成行散列来从最终散列中删除行。

数据处理

IDHash在Apache Arrow RecordBatches上运行,并且可以在批处理中零拷贝处理。

依赖关系

~11MB
~199K SLoC