【发布时间】:2015-07-07 10:12:56
【问题描述】:
是否有可能以分布式方式找到火花中的中位数?我目前正在查找:Sum、Average、Variance、Count,使用以下代码:
dataSumsRdd = numRDD.filter(lambda x: filterNum(x[1])).map(lambda line: (line[0], float(line[1])))\
.aggregateByKey((0.0, 0.0, 0.0),
lambda (sum, sum2, count), value: (sum + value, sum2 + value**2, count+1.0),
lambda (suma, sum2a, counta), (sumb, sum2b, countb): (suma + sumb, sum2a + sum2b, counta + countb))
#Generate RDD of Count, Sum, Average, Variance
dataStatsRdd = dataSumsRdd.mapValues(lambda (sum, sum2, count) : (count, sum, sum/count, round(sum2/count - (sum/count)**2, 7)))
我不太确定如何找到中位数。为了找到标准偏差,我只是用平方根方差在本地计算结果。一旦我收集到中值,我也可以轻松地在本地进行 Skewness。
我的数据在键/值对中(键 = 列)
【问题讨论】:
-
看看this question。高效的分布式中值算法并不简单。
标签: apache-spark pyspark