如何在pyspark中的多个键上使用GroupByKey?

时间:2017-08-31 19:55:28

标签: apache-spark pyspark rdd

我有一些看起来像这样的数据:

([('01','A','2016-01-01','8701','123','2016-10-23'),('01','A','2016-
01-01','8701','123','2016-11-23'),('01','A','2016-01-01','8701','123','2016-12-23')])

我的目标是在PySpark中分组('01','A','2016-01-01','8701','123')并让它看起来像

[('01','A','2016-01-01''8701','123', ('2016-10-23', '2016-11-23', 
'2016-12-23'))]

我尝试使用groupByKey,但没有为我工作。

感谢。

1 个答案:

答案 0 :(得分:2)

groupBy + map

rdd = sc.parallelize(([('01','A','2016-01-01','8701','123','2016-10-23'),('01','A','2016-01-01','8701','123','2016-11-23'),('01','A','2016-01-01','8701','123','2016-12-23')]))

rdd.groupBy(lambda x: x[:-1]).map(lambda g: g[0] + (tuple(x[-1] for x in g[1]),)).collect()
# [('01', 'A', '2016-01-01', '8701', '123', ('2016-10-23', '2016-11-23', '2016-12-23'))]