首页 > 解决方案 > 如果满足任何(不是全部)条件,如何执行火花连接

问题描述

pyspark文档指出可以按如下方式执行连接操作:

cond = [df.name == df3.name, df.age == df3.age]
df.join(df3, cond, 'outer').select(df.name, df3.age).collect()

这将成功加入名称和年龄列匹配的行。我正在尝试执行相同的连接,但条件是名称或年龄列匹配。

我试过了:

df.join(import_df, df.col1 == import_df.colA | df.col2 == import_df.colB , how="left")

但这给了我一个错误:

ValueError:无法将列转换为布尔值:请使用 '&' 表示 'and'、'|' 构建 DataFrame 布尔表达式时,为 'or','~' 为 'not'。

标签: pythonapache-sparkpyspark

解决方案


尝试将连接条件括在括号 ()中,然后在连接中使用 |运算符。

df.join(import_df, (df.col1 == import_df.colA) | (df.col2 == import_df.colB) , "left")

Using cond variable:

cond=[(df.col1 == import_df.colA) | (df.col2 == import_df.colB)]
df.join(import_df, cond, "left").show()

推荐阅读