我有一个带有大量数字的RDD(来自文件的行长度),我想知道如何在数据上单次传递最小/最大值。
我知道关于Min和Max的功能,但这需要两次传递。
答案 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:]]-'),'-')