Как получить данные для столбца из двух таблиц в spark scala - PullRequest
0 голосов
/ 04 июля 2019

Есть две таблицы Customer1 и Customer2

Customer1: список данных клиента

https://docs.google.com/spreadsheets/d/1GuQaHhZ70D0NHGXuW51B5nNZXrSkthmEduHOhwoZmRg/edit#gid=722500260

Customer2: список обновленных данных клиента

https://docs.google.com/spreadsheets/d/1GuQaHhZ70D0NHGXuW51B5nNZXrSkthmEduHOhwoZmRg/edit#gid=0

CustomerName должно быть выбрано из обеих таблиц. Если имя клиента обновлено, оно должно быть выбрано из таблицы Customer2, иначе оно должно быть выбрано из таблицы Customer1. Таким образом, должны быть перечислены все имена клиентов.

Ожидаемый результат:

https://docs.google.com/spreadsheets/d/1GuQaHhZ70D0NHGXuW51B5nNZXrSkthmEduHOhwoZmRg/edit#gid=1227228207

Как этого можно достичь в искровых скалах?

1 Ответ

0 голосов
/ 04 июля 2019

Вы можете выполнить Left Join на customer1 таблице, затем используя coalesce на customer2 таблице, чтобы получить first non null value для customername столбца.

Пример :

scala> val customer1=Seq((1,"shiva","9994323565"),(2,"Mani","9994323567"),(3,"Sneha","9994323568")).toDF("customerid","customername","contact")
scala> val customer2=Seq((1,"shivamoorthy","9994323565"),(2,"Manikandan","9994323567")).toDF("customerid","customername","contact")
scala> customer1.as("c1")
       .join(customer2.as("c2"),$"c1.customerid" === $"c2.customerid","left")
       .selectExpr("c1.customerid",
            "coalesce(c2.customername,c1.customername) as customername")
       .show()

Результат:

+----------+------------+
|customerid|customername|
+----------+------------+
|         1|shivamoorthy|
|         2|  Manikandan|
|         3|       Sneha|
+----------+------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...