pyspark 分组和合并RDD对键和值

wljmcqd8  于 2022-11-01  发布在  Spark
关注(0)|答案(1)|浏览(172)
RDD_Input =  [(('377', '80'), ('1', '4')), (('377', '510'), ('1', '5')), (('377', '79'), ('1', '4')), (('377', '791'), ('1', '1')), (('377', '511'), ('1', '4')), (('377', '433'), ('1', '3')), (('377', '687'), ('1', '1')), (('377', '456'), ('1', '1')), (('377', '399'), ('1', '4')), (('377', '96'), ('1', '5')), (('377', '780'), ('1', '1')), (('377', '683'), ('1', '1')), (('377', '403'), ('1', '5')), (('377', '999'), ('1', '4')), (('377', '502'), ('1', '4')), (('377', '435'), ('1', '5')), (('377', '550'), ('1', '5')), (('377', '948'), ('1', '1')), (('377', '393'), ('1', '4')), (('377', '648'), ('1', '4'))]

输入RDD是键值对((movie1, movie2), (rating1, rating2))
如何将RDD转换为((movie1, movie2), (rating1, rating2), (rating3, rating4), (rating5, rating6), ...))

预期结果示例:(('377', '399'), ('1', '4'), ('1', '4'))

('377', '399')是关键字,并且基于相同的关键字附加随后的元组索引。
要求是使用纯RDD API。

vzgqcmou

vzgqcmou1#

看起来,你想先groupByKey把值放入一个列表,然后只map

data = [(('a', 'b'), ('1', '4')), (('a', 'b'), ('3', '5')), (('c', 'd'), ('2', '2'))]
rdd = sc.parallelize(data)

rdd = rdd.groupByKey().mapValues(list)
rdd = rdd.map(lambda x: (x[0], *x[1]))

print(rdd.collect())

# [(('c', 'd'), ('2', '2')), (('a', 'b'), ('1', '4'), ('3', '5'))]

相关问题