Java从文件中读取行的样本

时间:2014-09-02 10:25:21

标签: java file-io sample random-sample

我需要从文件中对行进行采样(文件太大而无法加载到内存中)。 我有这个使用BufferedReader的剪切器:

    BufferedReader br = new BufferedReader(new FileReader(filename));
    String line;
    long counter = 0; 
    while ((line = br.readLine()) != null && DocCounter < 50000) {}

如何调整代码以从文件中随机抽取50000行? 感谢

2 个答案:

答案 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

等,每次更新分母。当你接近文件的末尾时要小心整数除法边界条件。