我正在使用scala提取内存中的zip文件,如下所示:
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
}
}
}
此代码的问题是,它仅读取zip内的第一个XML文件,然后自动关闭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
本身正在关闭流。