火花2.0+:
你可以用approxQuantile实现Greenwald-Khanna算法:
Python:df.approxQuantile("x", [0.5], 0.25)
斯卡拉:df.stat.approxQuantile("x", Array(0.5), 0.25)
其中最后一个参数是一个相对错误。次数越少,计算结果越准确,计算量越大。
星火2.2(火花-14352)它支持对多列的估计:df.approxQuantile(["x", "y", "z"], [0.5], 0.25)
和df.approxQuantile(Array("x", "y", "z"), Array(0.5), 0.25)
火花<2.0
Python
正如我在评论中提到的,这很可能不值得大惊小怪。如果数据相对较小,比如在您的情况下,那么只需在本地收集和计算中值:import numpy as np
np.random.seed(323)rdd = sc.parallelize(np.random.randint(1000000, size=700000))%time np.median(rdd.collect())np.array(rdd.collect()).nbytes
在我几年前的电脑上,它需要大约0.01秒的时间和大约5.5MB的内存。
如果数据要大得多,排序将是一个限制因素,因此,与其获得确切的值,不如在本地进行采样、收集和计算。但是,如果你真的想让一个人使用星火,这样的事情应该能起作用(如果我什么都没搞砸的话):