我有一个Spark RDD如下:
rdd = sc.parallelize([('X01','Y01'),
('X01','Y02'),
('X01','Y03'),
('X02','Y01'),
('X02','Y06')])
我想将它们转换为以下格式:
[('X01',('Y01','Y02','Y03')),
('X02',('Y01','Y06'))]
有人可以帮我解决如何使用PySpark实现这个目标吗?
答案 0 :(得分:1)
使用mapToPair(// with key as first column and the value will be rest of the record)
将RDD转换为PairRDD,并在结果RDD上执行groupByKey
。
答案 1 :(得分:1)
您需要一个简单的groupByKey
操作。
rdd.groupByKey().mapValues(lambda x: tuple(x.data)).collect()
结果:[('X02', ('Y01', 'Y06')), ('X01', ('Y01', 'Y02', 'Y03'))]
答案 2 :(得分:0)
如septra所说,groupByKey方法就是你所需要的。此外,如果要对所有值应用任何操作到特定键,则可以使用mapValues()方法执行相同操作。此方法将采用一种方法(您希望对分组值应用的逻辑)并应用于每个键上的所有分组值。如果你想同时进行两种操作,你可以选择“reduceByKey”方法。你可以对待“reduceByKey()= groupByKey()+ mapValues()”