Как обновить существующий столбец, используя другой столбец df - PullRequest
0 голосов
/ 10 мая 2019

У меня есть два DF, DF A и DF B. Оба имеют одинаковую схему.Столбец C DF A имеет другое значение, а столбец C DF B - другое значение, остальные данные точно такие же.Теперь, если я хочу объединить обе таблицы DF C, как это сделать в спарк?Я попытался сделать операцию соединения, но она создает дубликаты столбцов.Например: DF A:

+---+----+ | k| v| +---+----+ | 1| | | 2|bar1| +---+----+

DF B:

+---+----+ | k| v| +---+----+ | 1|foo1| | 2| | +---+----+ Ожидаемый результат: +---+----+ | k| v| +---+----+ | 1|foo1| | 2|bar1| +---+----+

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Вы можете использовать usingColumn или usingColumns, чтобы избежать дублирования:

val dfA = Seq((1, Option.empty[String]), (2, Some("bar1"))).toDF("k", "v")
val dfB = Seq((1, Some("foo1")), (2, Option.empty[String])).toDF("k", "v")

dfA.withColumnRenamed("v", "_av")
  .join(dfB.withColumnRenamed("v", "_bv"), usingColumn = "k")
  .withColumn("v", coalesce($"_av", $"_bv"))
  .drop("_av", "_bv")
  .show()

Выход:

+---+----+
|  k|   v|
+---+----+
|  1|foo1|
|  2|bar1|
+---+----+
0 голосов
/ 10 мая 2019
df_C= df_B.union(df_A).where(col('v').isNotNull())

Возьмите объединение двух фреймов данных и удалите нулевые записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...