2017-10-29 9 views
1

私はの郵便番号のファイルをのApache Sparkに読み込んでいます。私はmy answer on StackOverflowを共有しました。Apache Sparkの最後のストリームを閉じるとjava.io.IOExceptionが発生する:ストリームが閉じられる

@Programmerは、開かれたストリームを閉じているわけではないことをよく知っていました。私は

Stream.continually(zis.getNextEntry) 
    .takeWhile { 
    case null => zis.close(); false 
    case _ => true 
    } 
    .flatMap { _ => 
    val br = new BufferedReader(new InputStreamReader(zis)) 
    Stream.continually(br.readLine()) 
     .takeWhile{ 
     case null => br.close(); false 
     case _ => true 
     } 
    } 

takeWhileにおける部分関数(inspiration)でそれを達成しようとしたが、それは動作しません!

Job aborted due to stage failure: Task 0 in stage 5.0 failed 1 times, most recent failure: Lost task 0.0 in stage 5.0 (TID 20, localhost): java.io.IOException: Stream closed 
    at java.util.zip.ZipInputStream.ensureOpen(ZipInputStream.java:67) 
    at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:116) 

を単に開いて、それを残すことによって - それはOKに動作します:zipファイルを読んでいる間

、私は今、このエラーが発生します。

ストリームを閉じてもう一度読み込もうとしているようです。しかし、なぜそれを解決するのか分からない。

+1

これは、 'br'ストリームを閉じるときに' zis'を全部閉じているからではありませんか? –

答えて

0

私は外Streamを閉じていると、これが助けたの@アレクサンドル・dupriezコメント...

Stream.continually(zis.getNextEntry) 
    .takeWhile { 
    case null => zis.close(); false 
    case _ => true 
    } 
    .flatMap { _ => 
    val br = new BufferedReader(new InputStreamReader(zis)) 
    Stream.continually(br.readLine()).takeWhile(_ != null) 
    } 

続いてこのように私はそれが必要として、それが動作するかどうかを確認するためにしばらく時間が必要となります。

関連する問題