2016-11-17 40 views
-1

我有两个RDD,我想有一个内部联接的总和,那么新的值应该是值的总和rdd1rdd2星火内连接两个RDD和新的价值应该是旧值

一个例子:

RDD1 = [(key1,(1,2)), (key2,(2,3)),(key3,(3,4))] 
RDD2 = [(key1,(2,3), (key3,(4,5))] 

RDD_inner_join= [(key1,(3,5), (key3,(7,9))] 

我试图与rdd1.join(rdd2)但我想,我们不能做任何操作与旧的价值,当我们参加这两项rdd

有人有想法解决我的问题吗?

谢谢先进。

+0

'join'是加入后你有权访问RDD元素的好方法。你能分享你的代码加入,所以我们可以帮助你找到内部的错误? – Mariusz

+0

谢谢,我同意连接是一个好方法,但加入后我们有一个这样的元组(key,(value1,value2)),但我需要一个元组后加入like(key,value + value2) – Cheng

回答

0

加入两个RDDS后执行地图变形是这样的:

joinedRDDs.map(lambda r: (r[0], r[1][0][0] + r[1][1][0], r[1][0][1] + r[1][1][1])) 

,你会得到预期的结果。

+0

Thanks Mariusz,如果我们在加入后执行另一个作业mapreduce,这将是一个好主意。 – Cheng

+0

实际上,在火花上没有像“mapreduce工作”那样的东西。您的应用程序将执行两个转换(混洗连接和非混排映射),然后执行一些操作(如将结果保存在存储上,显示它等)。没关系,基本上你是如何在火花中编写应用程序的。 – Mariusz