在单次传递数据时使用pyspark查找最小值/最大值

时间:2016-04-11 21:43:28

标签: python apache-spark pyspark rdd

我有一个带有大量数字的RDD(来自文件的行长度),我想知道如何在数据上单次传递最小/最大值。

我知道关于Min和Max的功能,但这需要两次传递。

2 个答案:

答案 0 :(得分:7)

试试这个:

>>> from pyspark.statcounter import StatCounter
>>> 
>>> rdd = sc.parallelize([9, -1, 0, 99, 0, -10])
>>> stats = rdd.aggregate(StatCounter(), StatCounter.merge, StatCounter.mergeStats)
>>> stats.minValue, stats.maxValue
(-10.0, 99.0)

答案 1 :(得分:2)

这是一个使用累加器的工作但不优雅的解决方案。不完美之处在于你必须事先定义零/初始值,这样它们就不会干扰数据:

Replace(REGEXP_SUBSTR(string,.*-[[:alnum:]]-'),'-')