需要一个spark中的特定函数来检查所有元素是否与给定的谓词匹配?

时间:2017-06-19 05:08:19

标签: apache-spark apache-spark-sql apache-spark-2.0

我需要一个关于RDD的函数,让我们说'isAllMatched',它将谓词作为匹配的参数。但是,我不想扫描所有元素,如果谓词对任何元素都失败,它应该返回false。我还希望此函数在所有工作节点上并行执行。这是伪代码:

 def isAllMatched[T : ClassTag](rdd: RDD[T])(pred: T => Boolean) = {
      foreach(ele <- rdd.elements) {
           if(!pred(ele)) return false;
      }
      return true;
 }

Spark中有可能吗?有没有内置功能呢?

2 个答案:

答案 0 :(得分:0)

我不知道现有的RDD操作来实现这个结果,但你可以像这样实现你的功能:

def isAllMatched[T](rdd: RDD[T])(pred: T => Boolean): Boolean =
    rdd.filter(e => !pred(e)).isEmpty

答案 1 :(得分:-1)

Piotr的回答是正确的。它完全符合您的要求。延迟评估可确保扫描在第一个元素处于正确位置时停止,从而使谓词测试失败,并将布尔值false返回给驱动程序。在同一操作的其他节点上运行的任何任务都将被放弃。