重塑Spark RDD

时间:2017-02-07 08:41:16

标签: apache-spark pyspark

我有一个Spark RDD如下:

rdd = sc.parallelize([('X01','Y01'),
                   ('X01','Y02'),
                   ('X01','Y03'),
                   ('X02','Y01'),
                   ('X02','Y06')])

我想将它们转换为以下格式:

[('X01',('Y01','Y02','Y03')),
 ('X02',('Y01','Y06'))]

有人可以帮我解决如何使用PySpark实现这个目标吗?

3 个答案:

答案 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()”