gpt4 book ai didi

java - Java 中的任何 CSV Api,可以在大于 1 Gb 的 CSV 文件中来回遍历

转载 作者:行者123 更新时间:2023-11-29 23:49:36 24 4
gpt4 key购买 nike

我必须编写一个代码来比较两个 CSV(已排序)。 CSV 是自动生成的,并且始终包含超过 600,000 行和超过 140 列。没有必要逐行进行比较。很少有单元格将被视为主键,并将与 CSV2 中的行进行匹配,一旦找到匹配项,就会对 CSV2 中的特定行进行比较。但为此,我需要一次又一次地迭代 CSV2 以查找 CSV2 中的匹配行(因为行可能出现在 CSV2 的开头或最后)。这会消耗很多时间。

我采取的另一种方法是根据大小分割文件。但是,这种方法还有一个问题,因为文件中的某些行也分成两部分。例如,如果文件被分成两个,则第 320 行不完整,因为只有一部分存在于 file1 中,其余部分存在于 File2 中。

使用多线程(如果每个线程都处理分割文件),会出现一个问题,因为文件所在磁盘的 header 必须根据每个线程的要求移动。

还尝试使用 JDBC (CSVDriver),但由于 CSV 文件较大而引发 OutOfMemoryException。

有没有什么方法可以让我们使用任何文件阅读器或 CSV 阅读器在 CSV 中来回移动。例如,使用 CSV 读取器对象,说这样做: csvReaderObject.get(120) 获取第 120 行或 csvReaderObject.contains() 获取匹配的行号,类似这样?

最佳答案

您还可以使用 RandomAccessFile 类,该类确保数据驻留在磁盘上并在一个循环中遍历两个文件,以防您想要逐一比较每个文件中的行,或者如果您想要将文件 1 中的每一行与文件 2 中的所有行都必须在两个嵌套循环中遍历它们

后者的时间复杂度为 O(n^2),而第一个的时间复杂度为 O(n)

如果您想使用多线程,请确保为每个线程创建一个 RandomAccessFile 实例,因为只有一个游标对象。

然后根据行数计算批处理并将每个批处理分配给另一个线程

关于java - Java 中的任何 CSV Api,可以在大于 1 Gb 的 CSV 文件中来回遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25712132/

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