我需要一个关于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中有可能吗?有没有内置功能呢?
答案 0 :(得分:0)
我不知道现有的RDD操作来实现这个结果,但你可以像这样实现你的功能:
def isAllMatched[T](rdd: RDD[T])(pred: T => Boolean): Boolean =
rdd.filter(e => !pred(e)).isEmpty
答案 1 :(得分:-1)
Piotr的回答是正确的。它完全符合您的要求。延迟评估可确保扫描在第一个元素处于正确位置时停止,从而使谓词测试失败,并将布尔值false返回给驱动程序。在同一操作的其他节点上运行的任何任务都将被放弃。