在scala中解压缩并读取gzip文件

时间:2013-07-02 22:00:45

标签: scala gzip scalding

在Scala中,如何解压缩file.gz中包含的文本以便对其进行处理?我很高兴将文件的内容存储在变量中,或者将其保存为本地文件,以便程序可以在之后读入。

具体来说,我使用Scalding处理压缩日志数据,但Scalding没有定义在FileSource.scala中读取它们的方法。

1 个答案:

答案 0 :(得分:20)

这是我的版本:

import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.zip.GZIPInputStream
import java.io.FileInputStream

class BufferedReaderIterator(reader: BufferedReader) extends Iterator[String] {
  override def hasNext() = reader.ready
  override def next() = reader.readLine()
}

object GzFileIterator {
  def apply(file: java.io.File, encoding: String) = {
    new BufferedReaderIterator(
      new BufferedReader(
        new InputStreamReader(
          new GZIPInputStream(
            new FileInputStream(file)), encoding)))
  }
}

然后做:

val iterator = GzFileIterator(new java.io.File("test.txt.gz"), "UTF-8")
iterator.foreach(println)