【问题标题】:Spark Delta merge add Source column value to Target column valueSpark Delta 合并将源列值添加到目标列值
【发布时间】:2021-08-20 00:20:49
【问题描述】:

我希望目标列中的更新值是源值+目标值的总和

示例:

%scala 
import org.apache.spark.sql.functions._
import io.delta.tables._ 

// Create example delta table 
val dept = Seq(("Finance",10), ("Marketing",20),("Sales",30), ("IT",40) )
val deptColumns = Seq("dept_name","dept_emp_count")
val deptDF = dept.toDF(deptColumns:_*) 
deptDF.write.format("delta").mode("overwrite").saveAsTable("dept_table")

//create example stage dataframee
val staged_df = spark.sql("select * from dept_table").withColumn("dept_emp_count", lit(1))

//How to do this merge?
DeltaTable.forName(spark, "dept_table").as("events")
  .merge(staged_df.as("updates"), "events.dept_name = updates.dept_name")
.whenMatched()
.updateExpr(Map(                                      
  "dept_emp_count" -> lit("events.dept_emp_count") + lit("updates.dept_emp_count"))) // How do I write this line?
.execute()

【问题讨论】:

    标签: scala dataframe apache-spark azure-databricks delta-lake


    【解决方案1】:

    该更新 Map 中的值是 SQL 表达式,因此您只需编写 "events.dept_emp_count + updates.dept_emp_count" 而不是 lit("events.dept_emp_count") + lit("updates.dept_emp_count")

    【讨论】:

      猜你喜欢
      • 2015-08-11
      • 1970-01-01
      • 2011-05-19
      • 2021-11-10
      • 2013-10-06
      • 2020-03-30
      • 1970-01-01
      • 2019-07-09
      • 2019-12-18
      相关资源
      最近更新 更多