Динамическое объединение Dataframes с использованием Spark Scala, если столбцы JOIN отличаются - PullRequest
0 голосов
/ 30 октября 2018

Динамический выбор нескольких столбцов при объединении разных Dataframe в Scala Spark

По приведенной выше ссылке я смог заставить работать выражение объединения, но что, если имена столбцов отличаются, мы не можем использовать Seq (столбцы) и нам нужно динамически присоединиться к нему. Здесь left_ds и right_ds - это те кадры данных, к которым я хотел присоединиться. Ниже я хочу объединить столбцы id = acc_id и "acc_no = number"

left_da => id, acc_no, name, ph

right_ds => acc_id, number, location

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. Поэтому, если количество ключей объединения увеличится, я все равно смогу заставить код работать динамически.

1 Ответ

0 голосов
/ 30 октября 2018

С псевдонимами должны нормально работать:

val conditionArrays = joinKeys.split("\\|").map(c => c.split(","))
val joinExpr = conditionArrays.map { case Array(a, b) => col("a." + a) === col("b." + b) }.reduce(_ and _)
left_ds.alias("a").join(right_ds.alias("b"), joinExpr, "left_outer")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...