【发布时间】:2016-07-23 17:57:53
【问题描述】:
在 Scala 中,您如何有效地(内存消耗 + 性能)读取非常大的 csv 文件?是否足够快以逐行流式传输并在每次迭代中处理每一行?
我需要用 CSV 数据做什么:-> 在我的应用程序中,CSV 文件中的单行被视为一条记录,CSV 文件的所有记录都将转换为 XML 元素和 JSON 格式,并以 xml 和 json 格式保存到另一个文件中。
所以这里的问题是,在从 csv 读取文件时,以块的形式读取文件并将该块提供给另一个线程,该线程会将 CSV 记录转换为 xml/json 并将 xml/json 写入文件?如果是怎么办?
CSV 的数据可以是任何数据,数据的类型没有限制,可以是数字、大十进制、字符串或日期。在将其保存到 xml 之前,有什么简单的方法可以处理这种不同的数据类型?或者我们不需要处理类型?
非常感谢
【问题讨论】:
-
你的问题的标题与问题本身无关,那么你到底有什么问题?
-
好的,让我在编辑中说得更清楚
-
假设转换不需要太多时间(根据您的描述,它们不需要)。时间将完全由文件 I/O 控制。所以这将取决于你如何做到这一点。假设您使用一些缓冲读写,那么您如何构建其余部分实际上并没有任何区别(您可以使用异步写入来允许您在等待写入完成时处理缓冲区的价值,但这只会为您节省一个缓冲区大小的总体转换时间。
-
另外,1Gb 并不大。它适合大多数计算机的内存。因此,您可能可以将其全部读入,将其全部处理为内存中的 JSON 和 XML,然后将其作为两次单次写入写出,每种输出类型一次。也许你可以重叠这些。
-
好的,知道了。另一点是我的 CSV 可能有任何类型的数据,比如文本中可能有双引号、单引号、逗号、数字、小数。我将如何处理所有这些情况?