#scala #dataframe #apache-spark #azure-databricks #delta-lake
Вопрос:
Я хочу, чтобы обновленное значение в столбце цели было суммой исходного значения целевого значения
пример:
%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()
Ответ №1:
Значение в этой карте обновления является выражением SQL, поэтому вместо lit("events.dept_emp_count") lit("updates.dept_emp_count")
этого вам просто нужно написать "events.dept_emp_count updates.dept_emp_count"