2017-10-10 30 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))]