我在pyspark中有两个Dataframe,希望对它们执行外部连接。我需要能够将它们连接到每个表中不同的列名上,这些列名可能会改变(因此需要是一个变量,而不是硬编码的)。但是,当我此时执行此操作时,pyspark返回一个Dataframe,其中包含两个正在连接的列,其中一些值填充为null。
我目前使用的代码示例如下:
>>> df1 = spark.createDataFrame([[1,'apple'],[2,'orange']], ['id_fruit','fruit'])
>>> df2 = spark.createDataFrame([[2,100],[3,30]], ['fruit_id','numberInStock'])
>>> df1.show()
+--------+------+
|id_fruit| fruit|
+--------+------+
| 1| apple|
| 2|orange|
+--------+------+
>>> df2.show()
+--------+-------------+
|fruit_id|numberInStock|
+--------+-------------+
| 2| 100|
| 3| 30|
+--------+-------------+
>>> left_join_on = 'id_fruit'
>>> right_join_on = 'fruit_id'
>>> df1.join(df2, df1[left_join_on] == df2[right_join_on], how='outer').show()
+--------+------+--------+-------------+
|id_fruit| fruit|fruit_id|numberInStock|
+--------+------+--------+-------------+
| 1| apple| null| null|
| null| null| 3| 30|
| 2|orange| 2| 100|
+--------+------+--------+-------------+
如上所述,用于连接的两个列都被保留。对于内部联接,这是可以的(例如,我可以删除其中一列),但是对于外部联接,我确实需要同一列中的两个id值(例如,如果我想进行后续联接)。理想情况下,我想要的输出如下所示:
+--------+------+-------------+
|id_fruit| fruit|numberInStock|
+--------+------+-------------+
| 1| apple| null|
| 3| null| 30|
| 2|orange| 100|
+--------+------+-------------+
只有一个id列。有人知道我是怎么做到的吗?
1条答案
按热度按时间kjthegm61#
你可以
coalesce
两列:如果你只想保留合并的列,