Как объединить два фрейма данных spark java / scala на основе столбца? - PullRequest
0 голосов
/ 09 мая 2018

У меня есть два кадра данных DF1 и DF2 с id в качестве уникального столбца, DF2 может содержать новые записи и обновленные значения для существующих записей DF1, когда мы объединяем два кадра данных, результат должен включать новую запись, и старые записи с обновленными значениями должны оставаться такими, как есть.

Пример ввода:

id   name
10   abc
20   tuv
30   xyz

и

id   name
10   abc
20   pqr
40   lmn

Когда я объединяю эти два кадра данных, я хочу получить результат как:

id   name
10   abc
20   pqr
30   xyz
40   lmn

Ответы [ 2 ]

0 голосов
/ 09 мая 2018
df1.join(df2, Seq("id"), "leftanti").union(df2).show

| id|name|
+---+----+
| 30| xyz|
| 10| abc|
| 20| pqr|
| 40| lmn|
+---+----+
0 голосов
/ 09 мая 2018

Используйте внешний join, за которым следует coalesce. В Scala:

val df1 = Seq((10, "abc"), (20, "tuv"), (30, "xyz")).toDF("id", "name") 
val df2 = Seq((10, "abc"), (20, "pqr"), (40, "lmn")).toDF("id", "name")

df1.select($"id", $"name".as("old_name"))
  .join(df2, Seq("id"), "outer")
  .withColumn("name", coalesce($"name", $"old_name"))
  .drop("old_name")

coalesce даст значение первого ненулевого значения, которое в этом случае возвращает:

+---+----+
| id|name|
+---+----+
| 20| pqr|
| 40| lmn|
| 10| abc|
| 30| xyz|
+---+----+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...