1.一个不知道文本行数的文件,如何随机获得其中一行?要求还不能随机读,必须一行一行读。
这时蓄水池算法就出现了。伪代码如下:
此时,所有的行被选取的概率都是1/N
i = 0 #行号
s = null #随机选取的行
for line in 文本文件:
i = i+1
r = 生成[0,1)之间的随机数
if r < 1/i :
s = line #替换
2.如果随机选取k行?(前提当然是行数>k)
i = 0 #行号
s = [] #随机选取的多行
for line in 文本文件:
i = i+1
if i <= k:
s.append(line)
else:
j = 生成[1,i]之间的随机数
if j <= k:
s[j]=line
3. 如何在MR下实现随机选取k行