2016-04-22 115 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的三次通过与单次过滤器的一次通过,其中&&