我正在做一些分配,其中我们有两个表具有相同/不同的列。如果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
答案 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|
+---+----+----+