具有相同列和不同列的多个连接条件PySpark

qfe3c7zg  于 2022-11-01  发布在  Spark
关注(0)|答案(1)|浏览(163)

有没有一种简单的方法通过在pyspark语法中不重复相同的列来执行多重连接?
例如,我想尝试类似这样的操作(代码如下):
Input df2
| 识别码|州/省|dt_运行|
| - -|- -|- -|
| 一个|法国|2022年2月11日|
| 2个|英格兰|2022年2月11日|
| 三个|瑞士Name| 2022年2月11日|
Input df2
| 识别码|国家/地区|首都_城市|
| - -|- -|- -|
| 一个|法国|巴黎|
| 2个|英格兰|伦敦|

df_output = df1.join(df2, ['ID', df1.State==df2.Country], 'left')****〈-所需

这不起作用。是语法错误还是当列名相同时我也被迫重复“==”条件?

我不想这么做

> condition = [df1.ID==df2.ID, df1.State==df2.Country]
> df_output = df1.join(df2, condition, 'left')

这只是一个例子。这最后的代码给出了一个错误,因为它创建了2个同名(ID)的列。我可以只带一个吗?我想避免先重命名它们,我有很多数据集。

rseugnpd

rseugnpd1#

如果您希望通过比较联接两端的相同列(使用完全相同的名称)来进行联接,则使用的语法是联接的缩写形式。另请注意,您使用的语法将删除重复的列,而在下一个建议的方法中不会发生这种情况。
据我所知,上面的情况不是你的情况。在你的情况下,你可能应该使用标准语法来连接条件。下面的代码应该可以工作:

df_output = df1.join(df2, (df1.ID == df2.ID) & (df1.State == df2.Country), 'left')

更多信息可在here中找到。

相关问题