很少有条件过滤Apache Spark

Ruy*_*Zuy 1 scala apache-spark

我需要检查一些条件,所以我以这种方式过滤了我的 RDD:

scala> file.filter(r => r(38)=="0").filter(r => r(2)=="0").filter(r => r(3)=="0").count
Run Code Online (Sandbox Code Playgroud)

作为“&&”的替代品是否正确?

axi*_*iom 5

是的,&&在您的情况下,一系列过滤器在语义上等同于一个过滤器。

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

但是,上面的变体保证比早期版本更快。这可以通过以下方式建立:

  1. &&是一个短路运算符,只有在第一个计算结果为 时才会进行下一个比较true。两种情况下的比较次数将相同(是的!)。

  2. 多过滤器版本涉及 RDD 上的三遍,而使用&&.