pyspark:通过复制连接两个具有不同行数的Dataframe

xv8emn3q  于 2021-07-14  发布在  Spark
关注(0)|答案(1)|浏览(384)

大家好,
假设我想连接以下两个Dataframe,以便df2的一行在连接中与df1中具有相同id的每一行重复:

df1 = sc.parallelize(Array((0, 1.5, 8.4, 9.1),
                           (0, 5.9, 1.3, 3.3),
                           (0, 3.2, 7.9, 4.2),
                           (0, 6.9, 2.2, 1.2)))
                           .toDF("id", "col1", "col2", "col3")

df2 = sc.parallelize(Array((0, 2.1, 3.4, 4.2)))
                           .toDF("id", "col4", "col5", "col6")

预期结果如下:

df_joined.show() 

+---+-----+-----+-----+----+-----+-----+
| id| col1|col2 |col3 |col4|col5 |col6 |
+---+-----+-----+-----+----+-----+-----+
|  0|  1.5|  8.4|  9.1| 2.1|  3.4|  4.2|
|  0|  5.9|  1.3|  3.3| 2.1|  3.4|  4.2|
|  0|  3.2|  7.9|  4.2| 2.1|  3.4|  4.2|
|  0|  6.9|  2.2|  1.2| 2.1|  3.4|  4.2|
+---+-----+-----+-----+----+-----+-----+

我尝试了所有的外部连接,以及 crossJoin 这是两个df之间的笛卡尔积,但不起作用。一个简单的解决方案是只复制df2的行(对应的id在df1中出现的次数),然后执行一个普通的外部连接,但是我认为必须有一种方法通过使用连接来获得所需的结果。
谢谢你的帮助。

pgky5nke

pgky5nke1#

我想你可以加入 id :

df1.join(df2, 'id').show()
+---+----+----+----+----+----+----+
| id|col1|col2|col3|col4|col5|col6|
+---+----+----+----+----+----+----+
|  0| 1.5| 8.4| 9.1| 2.1| 3.4| 4.2|
|  0| 5.9| 1.3| 3.3| 2.1| 3.4| 4.2|
|  0| 3.2| 7.9| 4.2| 2.1| 3.4| 4.2|
|  0| 6.9| 2.2| 1.2| 2.1| 3.4| 4.2|
+---+----+----+----+----+----+----+

相关问题