2017-10-10 9 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を持っています。そして、最初の3つの列( 'a'、 'b'、 'c'など)をキーとしてグループ化し、いくつかの統計値を計算したいとします: たとえば、 'a'、 'b'、 'c'私は4番目と5番目の列の合計を得るために値(1,4)と(9,8)を集計したい:(10,12)。それらの平均を得る:(5,6)。どうすればそれを実現できますか? RDDでpysparkでrddでグループを実現するにはどうすればいいですか?

+0

所望の出力は何ですか?最も簡単なのは、データフレームAPIを使用することです。 – Psidom

答えて

1

(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))] 
関連する問題