Я извлекаю zip-файлы в памяти, используя команду scala, как показано ниже:
val rdd = sc.binaryFiles("/path")
.flatMap {
case (name: String, content: PortableDataStream) => {
val zis = new ZipInputStream(content.open())
Stream.continually(zis.getNextEntry()).takeWhile(_ != null)
.flatMap { _ =>
val br = new BufferedReader(new InputStreamReader(zis))
val root = scala.xml.XML.load(br);
val namespace = root.head.namespace
//other stuff
}
}
}
Проблема с этим кодом заключается в том, что он читает только 1-й файл XML внутри zip, а затем автоматически закрывает ZipInputStream, и я получаюошибка как:
java.io.IOException: Stream closed
at java.util.zip.ZipInputStream.ensureOpen(Unknown Source)
at java.util.zip.ZipInputStream.getNextEntry(Unknown Source)
У меня есть несколько zip-файлов, и каждый zip-файл содержит XML-файлы, моя цель - проанализировать каждый XML-файл. Поскольку я новичок в Scala, я не уверен, что делаю что-то не так или scala.xml.XML.load
сам закрывает поток.