使用具有对大数据集进行采样的功能
Using has function for sampling large data set
到目前为止,我一直在使用以下方法对大文件进行采样:
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) 个样本并将它们写入输出文件。
我该如何改进这种方法?我正在考虑使用哈希函数,该函数将根据键(在我的例子中是 UserID)对 20% 的输入数据进行采样。
我正在使用 Spark,所以一切都可以放入内存。环顾四周时,我发现了 MurmurHash3,但我对 Python 哈希函数知之甚少,我才刚刚开始使用 Spark。
如果您想随机抽样,可以使用 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)
到目前为止,我一直在使用以下方法对大文件进行采样:
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) 个样本并将它们写入输出文件。
我该如何改进这种方法?我正在考虑使用哈希函数,该函数将根据键(在我的例子中是 UserID)对 20% 的输入数据进行采样。
我正在使用 Spark,所以一切都可以放入内存。环顾四周时,我发现了 MurmurHash3,但我对 Python 哈希函数知之甚少,我才刚刚开始使用 Spark。
如果您想随机抽样,可以使用 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)