2017-10-10 60 views
1
data = sc.parallelize([('a','b','c', 1,4), ('o','u','w', 9,3), ('s','q','a', 8,6), ('l','g','z', 8,3), \ 
         ('a','b','c', 9,8), ('s','q','a', 10,10), ('l','g','z', 20,20), ('o','u','w', 77,77)]) 

我有一個這樣的rdd。我想將前三列(如'a','b','c')作爲鍵,來計算一些統計值: 例如,對應於'a','b','c',我想彙總值(1,4)和(9,8),得到第4列和第5列的總和:(10,12)。得到他們的意思:(5,6)。我怎麼能意識到它?如何在pyspark中通過rdd實現組?

+0

有什麼期望的輸出?最簡單的就是使用數據框API。 – Psidom

回答

1

隨着RDD:

(data.map(lambda x: (x[:3], x[3:] + (1,))) 
    .reduceByKey(lambda a, b: tuple(x + y for x, y in zip(a, b))) 
    .map(lambda x: (x[0], (x[1][0]/x[1][2], x[1][1]/x[1][2]))) 
).collect() 

# [(('a', 'b', 'c'), (5, 6)), (('l', 'g', 'z'), (14, 11)), (('s', 'q', 'a'), (9, 8)), (('o', 'u', 'w'), (43, 40))]