私のコードに奇妙なバグがあり、デバッグ中に問題を解決することができました。問題は、var
RDDをvar
変数でフィルタリングし、同じRDDにフィルタ結果を格納すると、RDDが正しく更新されることです。 問題は、var変数を更新した後、私は自動的に結果をフィルタリングするために使用されました再びフィルタリングすることです!varでRDDをフィルタリングすると予期しない動作が発生する
コード例:
var filter = 5
var a1 = sc.parallelize(List(1,2,3,4,5,6,7,8,9))
a1 = a1.filter(t => !t.equals(filter))
a1.foreach(println) // result is: 1-9 without 5
filter = filter + 1
a1.foreach(println) // result is: 1-9 without 6
がなぜ起こっていますか?私のコードにバグを引き起こさないようにするためのルールは何ですか?
答えはthx、ラムダ式を指し示す+1は変数をキャプチャします!私は怠惰な評価について知っていますが、var変数を使ったアプリケーションは考えていませんでした。 –