Я пишу запрос на соединение для 2-х фреймов. Я должен выполнить объединение на столбце, который имеет одинаковое имя в обоих таймфреймах. Как я могу написать это в Query?
var df1 = Seq((1,"har"),(2,"ron"),(3,"fred")).toDF("ID", "NAME")
var df2 = Seq(("har", "HARRY"),("ron", "RONALD")).toDF("NAME", "ACTUALNAME")
df1.createOrReplaceTempView("table1")
df2.createOrReplaceTempView("table2")
Я знаю, что мы можем сделать df3 = df1.join(df2, Seq("NAME"))
, где NAME
- это столбец commmon. В этом сценарии df3
будет иметь только ID, NAME, ACTUALNAME
.
Если мы сделаем это из SQL, запрос будет select * from table1 LEFT OUTER JOIN table2 ON table1.NAME = table2.NAME
. Для этого выходного фрейма данных будет ID, NAME, NAME, ACTUALNAME
столбцов. Как убрать лишний столбец NAME
, полученный из df2
.
Это тоже не работает spark.sql("select * from table1 LEFT OUTER JOIN table2 ON table1.NAME = table2.NAME").drop(df2("NAME"))
Есть ли более чистый способ сделать это? Переименование столбцов df2
- последний вариант, который я не хочу использовать. У меня есть сценарий, в котором создание SQL-запросов проще, чем датафреймов, поэтому ищу только SPARK SQL Специфичные ответы