用于 PySpark RDD 的高效布尔归约“any”、“all”?

MRo*_*lin 5 apache-spark

PySpark 支持常见的归约,如sum, min, count, ... 它是否支持布尔归约,如allany

我总是可以fold结束or_and_ 但这似乎效率低下。

小智 9

这已经很晚了,但是all在一组boolean值上z是相同的min(z) == True并且any是相同的max(z) == True


sam*_*est 2

不,底层Scala API没有它,所以 Python 肯定不会。我认为他们也不会添加它,因为它很容易用filter.

是的,使用fold效率很低,因为它不会并行化。做一些.filter(!condition).take(1).isEmpty有意义.forall(condition).filter(condition).take(1).nonEmpty事情.exists(condition)

(一般建议:底层的 Scala API 通常比 Python API 更灵活,建议您转向它 - 它也使调试更加容易,因为您需要挖掘的层数更少。Scala 意味着可扩展语言 - 它更适合可扩展的应用程序等比动态类型语言更强大)