我需要从文件中对行进行采样(文件太大而无法加载到内存中)。 我有这个使用BufferedReader的剪切器:
BufferedReader br = new BufferedReader(new FileReader(filename));
String line;
long counter = 0;
while ((line = br.readLine()) != null && DocCounter < 50000) {}
如何调整代码以从文件中随机抽取50000行? 感谢
答案 0 :(得分:0)
尝试使用任何随机值,然后在您的情况下将其更改为5000:
String line = reader.readLine();
for (int i = 0; i < randomInt + 1; i++) {
line = reader.readLine();
}
答案 1 :(得分:0)
要随机抽样50000行,您必须知道文件中的总行数,这样您才能在整个文件中分发样本(并确保您不会过早地用完行)。
基本方法是定义初始跳过值
k = n/50000
其中n
是总行数。然后遍历文件,生成范围
s = k ± e
其中e
是k的一部分。在每次迭代中跳过s
行,对一行进行采样,然后根据跳过后剩余的行数重新计算k
。即在第一次迭代之后
t += s+1
k = (n-t)/49999
等,每次更新分母。当你接近文件的末尾时要小心整数除法边界条件。