如果在Spark SQL中不存在其他更新,则进行插入

Ama*_*ana 3 apache-spark apache-spark-sql

在Spark SQL中是否有做“如果不存在则进行其他更新的插入”的规定。

我有一些记录的Spark SQL表“ ABC”。然后我有另一批记录,我想根据它们是否存在于此表中在此表中插入/更新。

我可以在SQL查询中使用SQL命令来实现这一点吗?

Gle*_*olt 5

在常规Spark中,可以join通过以下map类似方式实现:

import spark.implicits._
val df1 = spark.sparkContext.parallelize(List(("id1", "orginal"), ("id2", "original"))).toDF("df1_id", "df1_status")
val df2 = spark.sparkContext.parallelize(List(("id1", "new"), ("id3","new"))).toDF("df2_id", "df2_status")

val df3 = df1
  .join(df2, 'df1_id === 'df2_id, "outer")
  .map(row => {
    if (row.isNullAt(2))
      (row.getString(0), row.getString(1))
    else
      (row.getString(2), row.getString(3))
  })
Run Code Online (Sandbox Code Playgroud)

这样产生:

scala> df3.show
+---+--------+
| _1|      _2|
+---+--------+
|id3|     new| 
|id1|     new|
|id2|original|
+---+--------+
Run Code Online (Sandbox Code Playgroud)

您也可以使用selectwith udfs代替map,但是在这种特殊情况下使用null值的情况下,我个人更喜欢该map变体。