pyspark连接两个RDD并将结果展平

pyspark连接两个RDD并将结果展平,pyspark,rdd,Pyspark,Rdd,环境是pyspark,Spark版本2.2 我们有两个RDDtest1和test2,下面是示例数据 test1=[('a',20),('b',10),('c',2)] test2=[('a',2),('b',3)] 现在我们要生成如下所示的output1,非常感谢您的帮助 [('a',20,2),('b',10,3)] 您可以通过一个简单的join然后调用map将值展平来实现这一点 test1.join(test2.map)(lambda(key,values):(key,)+values.c

环境是pyspark,Spark版本2.2

我们有两个RDD
test1
test2
,下面是示例数据

test1=[('a',20),('b',10),('c',2)]
test2=[('a',2),('b',3)]
现在我们要生成如下所示的
output1
,非常感谢您的帮助

[('a',20,2),('b',10,3)]

您可以通过一个简单的
join
然后调用
map
将值展平来实现这一点

test1.join(test2.map)(lambda(key,values):(key,)+values.collect()
#[('a',20,2),('b',10,3)]

为了解释,连接的结果如下所示:

test1.join(test2.collect())
#[('a',(20,2)),('b',(10,3))]
这几乎是所需的输出,但您希望将结果展平。我们可以通过调用
map
并返回具有所需格式的新
tuple
来实现这一点。语法
(key,)
将创建一个只有key的单元素元组,我们将其添加到值中

您还可以使用DataFrame API,通过使用将RDD转换为DataFrame:

test1.toDF([“key”,“value1]”)。join(test2.toDF([“key”,“value2]”),on=“key”).show()
#+---+------+------+
#|键|值1 |值2|
#+---+------+------+
#|b | 10 | 3|
#|a | 20 | 2|
#+---+------+------+

您是想获得出现的次数,还是只是在两个rdd之间进行连接?但是,“c”呢?@Prazy这是一个内部连接。在
test2
中没有
'c'
。哦,是的。:)好兄弟。