我有~200 K命名属性和~25K文件。我使用Python作为一组包含每个文件的属性,提取每个文件的属性是否保持不变。
要进行此提取,我可能会并行地在一个计算场上运行数百个单独的python提取脚本。每个文件都留下了从每个文件中提取的集合的一些表示形式。
进一步的处理包括读取这些20K集并处理累积的数据。若要在这组文件/属性上生成报告,请执行以下操作。
我遇到的一个问题是,如果将提取的集合存储为文本,那么长属性名称字符串和文件名字符串将被重复使用,浪费磁盘空间并增加解析时间。
我正在考虑为排序的属性名创建一个中心索引,只保存索引--与文件名相同,可能是要导入的.py文件。
在排序的名称列表中使用索引的另一种方法是使用str.散列()值作为索引,这意味着处理速度可能更快,但我担心两个不平等字符串最终得到相同的散列()值的可能性。会发生这种事吗?
我将在所有机器上使用相同的Python可执行文件和操作系统版本。
发布于 2010-11-02 11:23:23
你事先知道这些房产吗?如果您这样做,您可能会考虑完美散列 (即您可以分发哈希的设置,而不是完整的属性/文件列表)。
一个非常粗糙的(但可能是工作方式)是有几个不同的散列函数(h1,h2.);例如,从str.hash()开始并计算散列。如果存在冲突,请尝试使用元组(h1(属性)、h2(属性))作为散列。如果仍然存在冲突,请使用(h1(property)、h2(property)、h3(Property)等),直到没有冲突为止。h_x函数实际上可以是一些可配置的函数,推荐的方法是尝试一些随机的哈希函数。
然而,在我看来,这可能是过头了,仅仅分发文件/属性列表可能要容易得多.
发布于 2010-11-02 10:38:00
哈希会碰撞。你得考虑一下。
https://stackoverflow.com/questions/4076822
复制相似问题