使用has函数对大数据集进行采样

时间:2015-08-02 21:19:46

标签: python apache-spark pyspark

到目前为止,我一直使用以下方法对大文件进行采样:

with open(myfile) as f1:
    with open(output,'w') as f2:
        for i,line in enumerate(f1):
            if i%my_rate==0:
                f2.write(line)

此代码遍历输入文件并获取每个n(= my_rate)样本并将其写入输出文件。

我该如何改进这种方法?我正在考虑使用哈希函数,该函数将根据密钥(在我的情况下是用户ID)对20%的输入数据进行采样。

我正在使用Spark,所以一切都可以融入内存。在环顾四周的时候,我发现了MurmurHash3,但我对Python哈希函数了解不多,我刚开始使用Spark。

1 个答案:

答案 0 :(得分:1)

如果您想随机抽样,可以使用random包来绘制一个随机数,只有当抽奖低于某个值时才使用该行。

import random
cutoff = .2 # (random draws between 0 and 1, so .2 would yield a 20% sample.)
with open(myfile) as f1:
    with open(output,'w') as f2:
        for i,line in enumerate(f1):
            if random.random() < cutoff:
                f2.write(line)