2016-04-22 15 views
1

ich ein paar Bedingungen einer Kontrolle benötigen, so dass ich meine gefiltert RDD auf diese Weise:Wenige Bedingungen Filter Apache Spark

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

Ist es richtig, als Alternative von „& &“?

+0

Ja, es wird wok wie &&, natürlich. Nicht sicher, was am Ende effizienter sein wird –

+0

Ich denke, das war die Frage - ist das die Frage: Was ist effizienter? –

+0

@ david-greif Ja, es war wie eine doppelte Frage, ob ich einen solchen Ausdruck benutzen kann und ob er genauso effizient ist wie "&&" –

Antwort

3

Ja, eine Reihe von Filtern entspricht semantisch einem Filter mit && in Ihrem Fall.

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

jedoch die obige Variante gewährleistet ist als die frühere Version, schneller zu sein. Dies kann über die folgenden hergestellt werden:

  1. && ist ein Kurzschluss-Operator, und der nächste Vergleich geschieht nur, wenn der erste, der true auswertet. Die Anzahl der Vergleiche in beiden Fällen ist die gleiche (ja!).

  2. Die Version mit mehreren Filtern umfasst drei Übergänge über die RDD im Vergleich zu einem Durchgang für einen einzelnen Filter mit &&.