Распаковать и прочитать gzip файл в scala

В Scala, как можно разжать текст, содержащийся в file.gz, чтобы его можно было обработать? Я был бы счастлив либо с содержимым файла, хранящегося в переменной, либо с сохранением его в качестве локального файла, чтобы после этого он мог быть прочитан программой.

В частности, я использую Scalding для обработки сжатых данных журнала, но Scalding не определяет способ их чтения в FileSource.scala.

Ответ 1

Здесь моя версия:

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)))
  }
}

Тогда do:

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