0

我正准备使用 Python 在相当大的数据集(400,000 行)上运行重复数据删除。在DedupeMatching该类的文档中,既有matchmatchBlocks功能。对于match文档,建议仅在中小型数据集上使用。通过查看代码,我无法收集在匹配时如何比仅在更大的数据集上matchBlocks表现block_data更好。matchgenerator=True

我尝试在一个小型数据集(10,000 个实体)上运行这两种方法,但没有发现差异。

data_d = {'id1': {'name': 'George Bush', 'address': '123 main st.'}
         {'id2': {'name': 'Bill Clinton', 'address': '1600 pennsylvania ave.'}... 
         {id10000...}}

然后是方法A:

blocks = deduper._blockData(data_d)
clustered_dupes = deduper.matchBlocks(blocks, threshold=threshold)

或方法 B

clustered_dupes = deduper.match(blocks, threshold=threshold, generator=True)

(然后计算密集型部分正在对象for-loop上运行clustered_dupes

cluster_membership = {}
for (cluster_id, cluster) in enumerate(clustered_dupes):
    # Do something with each cluster_id like below
    cluster_membership[cluster_id] = cluster

我期望/想知道是否存在性能差异。如果是这样,您能否指出显示这一点的代码并解释原因?

4

1 回答 1

0

_blockDatacall and thenmatchBlocks与 just之间没有区别match。实际上,如果您查看代码,您会看到match调用了这两个方法。

暴露的原因matchBlocks是它_blockData会占用大量内存,您可能希望以另一种方式生成块,例如利用关系数据库。

于 2020-03-05T06:53:47.373 回答