2016-04-22 109 views
1

我需要檢查一些條件,讓我過濾我RDD這樣:幾個條件過濾阿帕奇星火

scala> file.filter(r => r(38)=="0").filter(r => r(2)=="0").filter(r => r(3)=="0").count 

它是正確的爲「& &」的方法嗎?

+0

是的,它當然會和&&一樣。不知道哪個會更有效 –

+0

我認爲這是個問題 - 問題是:哪個更有效? –

+0

@ david-griffin是的,如果我可以使用這種表達方式,並且它與使用「&&」相同的效率,那就像是雙重問題) –

回答

3

是的,一系列的過濾器在語義上相當於一個過濾器&&你的情況。

file.filter(r => r(38) == "0" && r(2) == "0" && r(3) == "0")

然而,上面的變體是保證比以前的版本快。這可以通過以下方式確定:

  1. &&是短路操作,和下一個比較發生僅當第一個計算結果爲true。在這兩種情況下的比較數將是相同的(是!)。

  2. 多重過濾器版本涉及RDD的三次通過與單次過濾器的一次通過,其中&&