2017-02-25 72 views
1

我有两个RDD,看起来像这样:RDD1元素看起来像这样[123,456,789],RDD2元组看起来像这样[456,999]。现在我需要结合/连接这两个基于456的RDD,这是RDD1中的第二个元素,RDD2中的第一个元素。最终输出看起来像这样: - [123,456,789,999]。有没有办法做到这一点,或者做钥匙需要首先加入? 预先感谢您的时间。当密钥不在同一地点时连接两个RDD

+0

so RDD1由3个元素的元组构成,RDD2由2个元素的元组构成? –

+0

是的..这是正确的..我需要将这2个RDD合并为4个元素的元组,然后根据最后一个元素减少我最后加入的RDD,在这种情况下,这是999。 –

回答

0

您可以将RDD转换为Dataframe,然后进行如下所示的简单连接。

rdd1 = sc.parallelize([(123, 456, 789)]) 
rdd2 = sc.parallelize([(456, 999)])  
df1 = rdd1.toDF() 
df2 = rdd2.toDF() 
result = df1.join(df2, df1['_2'] == df2['_1']) 
result.rdd.map(lambda x: (x[0],x[1],x[2],x[4])).collect() 
[(123, 456, 789, 999)] 
+0

当我试图将这段代码检查此RDD是否有toDF函数返回false:print hasattr(RDD1,“tdDF”)。如果这些东西已经是RDD,我需要并行吗? –

+0

我粘贴了Scala代码..让我重新发布python版本 –

+0

@DigvijaySawant更新了pyspark版本 –

相关问题