首页 > 解决方案 > 从两个不同的 rdd 创建一个新的 rdd

问题描述

我有两个 rdd 如下:

rdd1=sc.parallelize([(('a','b'),10),(('c','d'),20)])
rdd2=sc.parallelize([('a',2),('b',3),('c',4)])

我需要创建一个新的 rdd 如下:(值('a', 'b') => value(a,b)/value(a) => 10/2

[(('a','b'), 5.0), (('c','d'), 5.0)]

标签: python-3.xapache-sparkpyspark

解决方案


您的要求表示您希望数字 rdd1 除以 rdd2 的值,该值与 rdd2 的键与 rdd1 键的第一个值相匹配

如果我的理解是正确的,那么可以通过执行以下操作来满足您的要求,其中 rdd1 被转换为使第一个值作为键,以便可以执行两个 rdd 之间的连接。

rdd1.map(lambda x: (x[0][0], x)).join(rdd2).map(lambda x: (x[1][0][0], float(x[1][0][1]/x[1][1])))
#[(('a', 'b'), 5.0), (('c', 'd'), 5.0)]

推荐阅读