繁体   English   中英

Spark:如何通过连接将两个 DataFrame 中的两个相似列合并到一列中?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM