python - 如果满足任何(不是全部)条件,如何执行火花连接
问题描述
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'。
解决方案
尝试将连接条件括在括号 ()
中,然后在连接中使用或 |
运算符。
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()
推荐阅读
- angular - IONIC (Angular) 项目中 Firebase 身份验证的配置问题
- r - 按降序生成数字序列
- scala - 为什么在 Spark 中创建数据集需要编码器
- r - r- ggplot2 颜色和填充不起作用
- java - 有没有办法使用 Jackson(或类似的库)针对现有的 Java 对象值对 JSON 对象键进行拼写检查?
- c++ - 为什么声明私有基类会使类型名称无法访问?
- c++ - Switch 在 while 循环中不断进入默认情况
- php - 在codeigniter3.0中重定向到其他功能后,会话自动取消设置
- class - 在堆栈上分配 D 类
- c# - 将 ASP Classic 数学语句转换为 Razor