pyspark:如何根据值为每个键只保留一个rdd

hrysbysz  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(476)

当我加入两个RDD时 key 梅有多个孩子 rdd ,这里我只想为每个键保留一个rdd。为了枫树。

a = sc.parallelize([('a','20200621'), ('b','20200701')])
b = sc.parallelize([('a',('20200520',10)), ('a', ('20200620',20)), ('b', ('20200620', 30))])
a.join(b).collect()

[('b', ('20200701', ('20200620', 30))),
 ('a', ('20200621', ('20200520', 10))),
 ('a', ('20200621', ('20200620', 20)))]

我只想预订两个日期最接近的rdd。这里,钥匙里 a , 20200621 以及 2020062020200621 以及 20200520 ,所以我想预订 ('a', ('20200621', ('20200620', 20))) 而不是 ('a', ('20200621', ('20200520', 10))) .
预期结果如下:

[('b', ('20200701', ('20200620', 30))),
 ('a', ('20200621', ('20200620', 20)))]
q9yhzks0

q9yhzks01#

我通过使用 reduceByKey .

b.join(a).reduceByKey(lambda x,y : x if x[1][0][0] > y[1][0][0] else y).collect()

输出:

[('b', (('20200620', 30), '20200701')), ('a', (('20200620', 20), '20200621'))]

相关问题