、左が参加し、select
コールは、トリックを行うだろう。本当の「更新」はここにありませんことを
// assuming "spark" is an active SparkSession:
import org.apache.spark.sql.functions._
import spark.implicits._
// some sample data; Notice it's convenient to NAME the dataframes using .as(...)
val A = Seq((1, "a1"), (2, "a2"), (3, "a3")).toDF("id", "value").as("A")
val B = Seq((1, "b1"), (2, "b2")).toDF("a_id", "value").as("B")
// left join + coalesce to "choose" the original value if no match found:
val result = A.join(B, $"A.id" === $"B.a_id", "left")
.select($"id", coalesce($"B.value", $"A.value") as "value")
// result:
// +---+-----+
// | id|value|
// +---+-----+
// | 1| b1|
// | 2| b2|
// | 3| a3|
// +---+-----+
お知らせ - result
あなたは(/回数/書き込みを使用することができ、新たなデータフレームです。 ..)でも元のDataFramesは変更されません。
まず、これらを 'col'関数で置き換えることができます。 'col(" A.id ")'彼らがあなたに問題を起こすならば。第二に、 '$ spark.implicits._'を' $ 'を使用するすべてのスコープで必要とします。 –
これは私のデータフレームサイズを2倍にすると思われますか? – noname
のように左の結合が何らかの理由で完全な外部結合のようになってしまう – noname