Scala:逐行读取一个巨大的压缩文本文件而不加载到内存中

标签 scala io compression

我有一个大小为 100-200 GB 的文本文件。所以我希望以压缩格式(如zip)存储。但是,由于它的大小,我需要一次处理一行。尽管使用 io.Source.fromFile(fileName).getLines 一次读取一行文本文件很简单。 ,但这仅适用于解压缩文件。
有没有一些有效的方法来逐行读取 Scala 中的压缩文件?我找不到任何示例,但我看到的更接近的实现是 here但它将文件加载到内存中。与通常提供的使用 zip 存档的示例不同,我只需要处理一个压缩的文本文件。我将不胜感激任何指示或线索。

最佳答案

如果文件是 Gzip 压缩的,java 的 GzipInputStream为您提供流媒体访问:

   val lines: Iterator[String] = Source
     .fromInputStream(new GzipInputStream(new FileInputStream("foo.gz")))
     .getLines
如果它是您的问题所暗示的 zip 存档,那就更复杂了。 Zip 文件更像是文件夹而不是单个文件。您必须先阅读目录,然后浏览条目以找到您想要阅读的条目(或阅读所有条目)。类似 this

关于Scala:逐行读取一个巨大的压缩文本文件而不加载到内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67679005/

相关文章:

python - 使用 zlib 压缩和解压缩 UTF-8 数据的正确方法是什么?

java - 如何使用 Apache POI 解析保存在 Excel 文件中的树结构

haskell - 从 IO ExitCode monad 获取字符串

algorithm - 压缩/加密算法输出保证

ios - 捕获从未压缩过的 iPhone 相机数据

Java 读取/写入文件 - BufferedReader BufferedWriter

scala - 如何在使用 PlaySpecification 编写的 Controller 测试前后执行一组代码?

Scala 类型 : How to Restrict the Generic Type of a Subclass?

scala - 如何使在 Scala 中实现的树对高阶集合函数有用?

io - 如何增加 cassandra 磁盘 I/O