[英]Spark Dataframes: How can I change the order of columns in Java/Scala?
[英]How to merge two dataframes spark java/scala based on a column?
我有两个数据帧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
使用外部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|
+---+----+
df1.join(df2, Seq("id"), "leftanti").union(df2).show
| id|name|
+---+----+
| 30| xyz|
| 10| abc|
| 20| pqr|
| 40| lmn|
+---+----+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.