Удалить список столбцов из одного кадра данных в искре - PullRequest
0 голосов
/ 25 марта 2019

У меня есть Dataframe, полученное в результате объединения двух Dataframe s: df1 и df2 в df3.Все столбцы, найденные в df2, также находятся в df1, , но их содержимое отличается .Я хотел бы удалить все столбцы df1, имена которых находятся в df2.columns из объединения.Был бы способ сделать это без использования var?В настоящее время я сделал это

var ret = df3
df2.columns.foreach(coln => ret = ret.drop(df2(coln)))

, но я действительно хочу просто ярлык для

df3.drop(df1(df2.columns(1))).drop(df1(df2.columns(2)))....

без использования переменной.

Передача списка столбцовне вариант, не знаю, потому что я использую spark 2.2

РЕДАКТИРОВАТЬ:

Важное примечание: я не знаю заранее столбцыdf1 и df2

Ответы [ 2 ]

2 голосов
/ 25 марта 2019

Этого можно достичь, пока вы выполняете само соединение.Пожалуйста, попробуйте следующий код

 val resultDf=df1.alias("frstdf").join(broadcast(df2).alias("scndf"),  $"frstdf.col1" === $"scndf.col1", "left_outer").selectExpr("scndf.col1","scndf.col2"...)//.selectExpr("scndf.*")

Это будет содержать только столбцы из второго фрейма данных.Надеюсь, это поможет

1 голос
/ 25 марта 2019

Ярлык будет:

val ret  = df2.columns.foldLeft(df3)((acc,coln) => acc.drop(df2(coln)))

Я бы предложил удалить столбцы перед объединением.В качестве альтернативы, выберите только столбцы из df3, которые взяты из df2:

val ret = df3.select(df2.columns.map(col):_*)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...