Как сравнить две таблицы и заменить нули значениями из другой таблицы - PullRequest
0 голосов
/ 05 апреля 2019

Я работаю над некоторым назначением, где у нас есть две таблицы с одинаковыми / разными столбцами. Если запись table A имеет некоторые значения столбцов как null, то это должно быть обновлено до значения в table B, и наоборот.

table A

id | code | type
1  | null | A
2  | null | null
3  | 123  | C

table B

id | code | type
1  | 456 | A
2  | 789 | A1
3  | null  | C

что я работал до сих пор

Dataset<Row> df1 = spark.read().format("csv").option("header", "true").load("C:\\Users\\System2\\Videos\\1199_data\\d1_1.csv");
    Dataset<Row> df2 = spark.read().format("csv").option("header", "true").load("C:\\Users\\System2\\Videos\\1199_data\\d2_1.csv");



df1
    .as("a").join(df2.as("b"))
    .where("a.id== b.id")
    .withColumn("a.code", 
             functions.when(
                     df1.col("code").isNull(),


                     df2.col("code")  )

).show();

Требуемый вывод

table C

id | code | type
1  | 456 | A
2  | 789 | A1
3  | 123  | C

1 Ответ

0 голосов
/ 05 апреля 2019

Вы можете использовать функцию объединения?

df1.join(df2, "id")
   .select(df1("id"), 
           coalesce(df1("code"), 
           df2("code")).as("code"), 
           coalesce(df1("type"), 
           df2("type")).as("type"))

И вывод:

+---+----+----+
| id|code|type|
+---+----+----+
|  1| 456|   A|
|  2| 789|  A1|
|  3| 123|   C|
+---+----+----+
...