是否可以通過分佈的方式找到火花中位數?我目前發現:Sum
,Average
,Variance
,Count
使用下面的代碼:pySpark以分佈式方式查找中位數?
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。
我在鍵/值對(鍵=列)
看看[這個問題](http://stackoverflow.com/questions/28158729/how-can-i-calculate-exact-median-with-apache-spark)。高效的分佈式中值算法並不簡單。 – nrg