gpt4 book ai didi

java - 50+ GB 分隔文件中的大约行数

转载 作者:行者123 更新时间:2023-11-30 11:02:52 25 4
gpt4 key购买 nike

我需要通过检查文件中的行数是否匹配(大约)附加到预告片的数字来验证相当大的分隔文件。

方法很少,我不接受:

-将整个文件放入堆中

- 在验证步骤完成之前,处理不会开始。

我目前拥有的:

我跟踪并解析预告片以获得行数,这非常有效。

我打算做什么:从文件中获取 0.5/1mb 的行样本(理想情况下是随机的),计算其中的行数并相应地相乘,以获得整个文件中行的近似值。

我不想局限于通过读取前“n”行然后检查其大小来创建样本...

问题:

是否可以在不读取整个文件的情况下获得这样的样本?我可以从文件中间开始获取 n 行,而不重新创建原始文件的一部分吗(例如 head '-c/n' 'x' file.csv > file1.csv 是效率不高)?

最佳答案

Is it possible to get a sample like that, without reading whole file?

是的。

Can I start fetching n number of rows starting from the middle of the file, without recreating part of the original file ..

是的。

  • 使用 File.length() 获取文件的长度。
  • 使用 FileInputStream 打开文件
  • 使用 FileInputStream.skip(N) 跳到您要采样的偏移量。 (我检查了 Java 8 源代码,skip 是高效的。它使用 lseek 系统调用而不是读取字节 ...)
  • 最后,将流包装在 BufferedReader(InputStreamReader) 中并使用 BufferedReader.readLine() 计算 M 行并测量它们的平均长度。

退后一步,我对问题本身有几点看法:

I need to validate quite large delimited file by checking if the number of rows within the file, matches(approximately) number appended to the trailer.

  1. 目前尚不清楚近似匹配是否有很大帮助。我想,这取决于您要检测的故障模式。

  2. 您不希望大多数/所有输入文件的平均记录相同吗?如果是这样,根据文件大小 x 预期的平均记录数来验证行数(来自预告片)可能更有意义。

  3. 抽样不会发现一小部分不良记录的问题。这种不良情况可能是空行或许多/大多数/所有字段为空的记录。

还有一个问题是,对这么大的文件进行单独的“快速”验证是否是个好主意。如果发现问题,您可以做什么?重新抓取?重新发送?在处理过程中进行全面验证不是更好吗?把文件变小不是更好吗?对于这种大小的文件,选择比 CSV 更紧凑的表示形式不是更好吗?

关于java - 50+ GB 分隔文件中的大约行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30619793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com