pyspark连接两个RDD并将结果展平
环境是pyspark,Spark版本2.2 我们有两个RDDpyspark连接两个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
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'
。哦,是的。:)好兄弟。