我有一个 RDD[T]
和一个断言 T => Boolean
,如何计算所有条目是否符合/不符合该断言?
当然我可以这样做:
rdd
.map(predicate)
.reduce(_ && _)
但是这将需要完整的集合迭代,这是一种过度设计。
我尝试了另一种方法,对于本地变量 [1] 运行良好,但在真实集群上似乎需要遍历所有内容:
rdd
.map(predicate)
.first()
[如果找不到所需的内容,则会引发异常]
如何规范地实现此目标?
我有一个 RDD[T]
和一个断言 T => Boolean
,如何计算所有条目是否符合/不符合该断言?
当然我可以这样做:
rdd
.map(predicate)
.reduce(_ && _)
rdd
.map(predicate)
.first()
[如果找不到所需的内容,则会引发异常]
如何规范地实现此目标?
aggregate
:def forAll[T](rdd:RDD[T])(p:T => Boolean): Boolean = {
rdd.aggregate(true)((b, t) => b && p(t), _ && _)
}
顺便提一下,在Spark中没有真正的提前终止方法,您只能将作业发送到群集并让其执行。Aggregate只是实现您想要的功能的一种好方式。