pySpark menemukan Median secara terdistribusi?

Apakah mungkin menemukan median dalam percikan secara terdistribusi? Saat ini saya menemukan: Sum, Average, Variance, Count menggunakan kode berikut:

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)))

Saya tidak begitu yakin bagaimana menemukan Median. Untuk mencari simpangan baku saya hanya melakukan hasilnya secara lokal dengan varians akar kuadrat. Setelah saya mengumpulkan median, saya juga dapat dengan mudah melakukan Skewness secara lokal.

Saya memiliki data saya dalam pasangan Kunci/Nilai (kunci = kolom)


person theMadKing    schedule 28.04.2015    source sumber
comment
Lihat pertanyaan ini. Algoritme median terdistribusi yang efisien tidaklah mudah.   -  person nrg    schedule 28.04.2015


Jawaban (1)


Apa yang saya lihat adalah (ini bukan cara terbaik... tapi satu-satunya cara yang terpikir oleh saya untuk melakukannya):

def medianFunction(x):
    count = len(x)
    if count % 2 == 0:
        l = count / 2 - 1
        r = l + 1
        value = (x[l - 1] + x[r - 1]) / 2
        return value
    else:
        l = count / 2
        value = x[l - 1]
        return value

   medianRDD = numFilterRDD.groupByKey().map(lambda (x, y): (x, list(y))).mapValues(lambda x: medianFunction(x)).collect()
person theMadKing    schedule 28.04.2015
comment
Baris medianRDD = diakhiri dengan .collect(). Apakah itu disengaja? Apakah Anda menguji solusi ini pada sedikit data pengujian? - person Geoffrey Anderson; 08.07.2016
comment
.collect adalah sebuah tindakan, dan melakukan sesuatu yang akan menghasilkan keluaran yang tidak berbahaya bagi pengemudi. Apa kekhawatiran Anda? - person theMadKing; 09.07.2016