如何比较两个表并将空值替换为其他表中的值

时间:2019-04-05 11:30:36

标签: apache-spark apache-spark-sql dataset

我正在做一些分配,其中我们有两个表具有相同/不同的列。如果table A的记录具有某些列值作为null,则必须更新为{{ 1}},反之亦然。

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

1 个答案:

答案 0 :(得分:0)

可以使用合并功能吗?

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|
+---+----+----+