如果满足任何(不是全部)条件,如何执行火花连接

Posted

技术标签:

【中文标题】如果满足任何(不是全部)条件,如何执行火花连接【英文标题】:How to perform a spark join if any (not all) conditions are met 【发布时间】:2021-02-26 21:09:49 【问题描述】:

pyspark documentation 声明可以按以下方式执行连接操作:

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'、'|' for 'or', '~' for 'not' 在构建 DataFrame 布尔表达式时。

【问题讨论】:

将条件放在括号之间。运算符“|”优先于 "==" 【参考方案1】:

尝试将连接条件包裹在 括号 () 然后使用 or | 运算符加入。

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()

【讨论】:

以上是关于如果满足任何(不是全部)条件,如何执行火花连接的主要内容,如果未能解决你的问题,请参考以下文章

yii2.0 中删除满足某几个条件的全部数据

如何等待所有异步的初始化条件全部加载完成后,再执行方法

拼接素数

禁用火花催化剂优化器

[待解决]ColumnPrefixFilter 不能过滤出全部满足条件的,

表格中满足一个条件的所有数据信息全部显示,怎么弄?