【发布时间】:2014-11-07 21:32:39
【问题描述】:
假设我有一个包含 100 万列、数百 GB 的 CSV 文件。
我的目标是尽快将此 CSV 文件的第 1、20 和 50 列的每一行读入内存。
我如何实现这一目标?像这样的东西会起作用,但在速度和内存方面效率低下,因为我需要解析每一列包含 100 万个元素 - 寻找不需要这个的更好的解决方案。
BufferedReader stream = ...;//reader
while ((line = stream.readLine()) != null) {
String[] keep = line.split(",");
//keep only 0th,19th,49th elements.
}
【问题讨论】:
-
面试题?
-
@HovercraftFullOfEels 否。我面临的一个数据挖掘问题,我只想读取一小部分列。
-
1.通过使用字符串函数从行中查找第 0、第 19 和第 49 个元素的位置,您可以避免创建 50 多个数组项。 2. 您可以一次读取一个字符并通过计算换行符和逗号来打开和关闭解析,但我怀疑这个自定义代码可能会比创建完整的 readLline 字符串要慢。
标签: java csv memory-management io bufferedreader