Scala scala.xml.XML.load (is: InputStream) закрывает ZipInputStream - PullRequest
0 голосов
/ 11 ноября 2019

Я извлекаю 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 сам закрывает поток.

...