[英]Spark: How to merge two similar columns from two DataFrames in one column by doing join?
我有 SQL 表,我必须使用表中的数据进行更新。
为此,我计算了 DataFrame。
我有两个 DataFrame:我计算并从数据库中获取。
val myDF = spark.read.<todo something>.load()
val dbDF = spark.read.format("jdbc").<...>.load()
最后,DataFrame 的结构相同。
例如:
我的DF
钥匙 | 柱子 |
---|---|
键1 | 1 |
键2 | 2 |
关键3 | 3 |
数据库
钥匙 | 柱子 |
---|---|
键1 | 5 |
键2 | 5 |
关键3 | 5 |
我需要获得只有一列名为 Column 的新 DF。
新东风
钥匙 | 柱子 |
---|---|
键1 | 6 |
键2 | 7 |
关键3 | 8 |
为此,我执行以下操作:
myDF
.as("left")
.join(dbDF.as("right"), "key")
.withColumn("column_temp", $"left.column" + $"right.column")
.drop($"left.column")
.drop(s"right.column")
.withColumnRenamed("column_temp", "column")
我必须为我必须计算的每一列执行这些操作。
换句话说,我的联接不假定添加新列。 我必须将相似的列合并为一列。
我可以通过对两列求和来计算新列,或者可以从两个给定列中选择不是 null 列,如下所示:
myDF
.as("left")
.join(dbDF.as("right"), "key")
.withColumn("column_temp", coalesce($"left.column", $"right.column"))
.drop($"left.column")
.drop(s"right.column")
.withColumnRenamed("column_temp", "column")
当我的 DataFrame 有很多列并且只有 1 或 2 个键列时,我必须对每一列重复上述操作。
我的问题是:
有没有更有效的方法来做我所做的事情? 还是我做对了?
myDF.join(dbDF,myDF.col("key").equalTo(dbDF.col("key")))
.select(myDF.col("key"))
.withColumn("column",myDF.col("key").plus(dbDF.col("key")));
你能试试这个吗? 它是一个内连接,因此只有左表中与右表匹配的那些行才会被选中。 那是你的情况吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.