几乎没有条件过滤Apache Spark

时间:2016-04-22 16:57:20

标签: scala apache-spark

我需要检查几个条件,所以我这样过滤了我的RDD:

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

作为"&&"?

的替代品是否正确

1 个答案:

答案 0 :(得分:4)

是的,一系列过滤器在语义上等同于一个带有&&的过滤器。

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

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

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

  2. 多个过滤器版本涉及RDD的三次传递,而&&的单个过滤器的一次传递。