我需要从文件中取样行(文件太大,无法加载到内存中)。我让这个狙击手使用BufferedReader:
BufferedReader br = new BufferedReader(new FileReader(filename));
String line;
long counter = 0;
while ((line = br.readLine()) != null && DocCounter < 50000) {}如何调整代码以从文件中随机抽取50000行?谢谢
发布于 2014-09-02 10:35:02
对任意随机值尝试以下操作,然后在您的情况下将其更改为5000:
String line = reader.readLine();
for (int i = 0; i < randomInt + 1; i++) {
line = reader.readLine();
}发布于 2014-09-02 22:38:08
要随机抽样50000行,您必须知道文件中的行总数,这样就可以在整个文件中分发示例(并确保不会过早用完行数)。
基本方法是定义初始跳过值。
k = n/50000其中n是行总数。然后循环遍历生成范围内的随机数的文件。
s = k ± e其中e是k的某个分数,在每次迭代中跳过s行时,取样一行,然后根据跳过后剩下的行数重新计算k。即在第一次迭代之后
t += s+1
k = (n-t)/49999等等,每次更新分母。当您接近文件末尾时,请注意整数除法边界条件。
https://stackoverflow.com/questions/25621159
复制相似问题