java - Spark:动态构造连接表达式
问题描述
我必须使用连接表达式连接两个数据集:
ds1.join(ds2, joinExpr)
joinExpr
例如可以是ds1.col(price).equals(ds2.price)
但我必须使用外部属性文件动态外部化连接列:
-price
-name
-adress
...
是否可以动态构造这个表达式?
解决方案
您可以使用expr(String)作为joinExpr
. 字符串参数可以是任何可以从配置文件加载或构造的有效 SQL 表达式。
import static org.apache.spark.sql.functions.*;
//construct test data
df1 = ...
//+---+---+
//| a| b|
//+---+---+
//| 1| 2|
//| 3| 4|
//+---+---+
df2 = ...
//+---+---+
//| c| d|
//+---+---+
//| 1| 1|
//| 3| 5|
//+---+---+
//define the join condition. It could be loaded from a file
String joinCondition = "a=c and b>d";
df1.join(df2, expr(joinCondition)).show();
//+---+---+---+---+
//| a| b| c| d|
//+---+---+---+---+
//| 1| 2| 1| 1|
//+---+---+---+---+
推荐阅读
- node.js - Azure Linux Web 应用程序(节点)崩溃并显示消息:“分段错误(核心转储)”并重新启动
- c# - 适合分布式系统中工作编排/任务负载平衡的库/工具
- model - 原油蒸馏装置 Simulink 模型仿真
- dataframe - 在pyspark中循环数据帧
- linux - IntelliJ 查找 SSH 密码
- python - 我的 tkinter 程序在按下按钮时修改标签出现故障(关闭)
- python - 如何解决这个问题:使用关键字参数 '{'slug': ''}' 反转 'post_detail'。尝试了 1 种模式:['(?P
[-a-zA-Z0-9_]+)/$']? - python - atom 1.54 无法从浏览器获取 xpath(带有 Firefox 的 selenium webdriver)
- pytorch-lightning - 使用 pytorch 闪电进行多 GPU 训练时出错
- ruby-on-rails - 双和 | 预期:[0, 1],而不是:[0, 0] | Ruby 索引的问题