【发布时间】:2019-04-02 22:55:19
【问题描述】:
Dynamically select multiple columns while joining different Dataframe in scala spark
从上面的链接,我可以让连接表达式工作,但是如果列名不同,我们不能使用 Seq(columns) 并且需要动态连接它。这里 left_ds 和 right_ds 是我想加入的数据框。 下面我要加入列 id=acc_id 和 "acc_no=number"
left_da => id,acc_no,name,ph
right_ds => acc_id,号码,位置
val joinKeys="id,acc_id|acc_no,number"
val joinKeyPair: Array[(String, String)] = joinKeys.split("\\|").map(_.split(",")).map(x => x(0).toUpperCase -> x(1).toUpperCase)
val joinExpr: Column = joinKeyPair.map { case (ltable_col, rtable_col) =>left_ds.col(ltable_col) === right_ds.col(rtable_col)}.reduce(_ and _)
left_ds.join(right_ds, joinExpr, "left_outer")
上面是我尝试的连接表达式,但它不起作用。如果连接列名称不同而没有使用 Seq,有没有办法实现这一点?因此,如果连接键的数量增加,我应该仍然能够使代码动态工作。
【问题讨论】:
标签: scala apache-spark apache-spark-sql