0
条件付きで1つの列をマージする必要がある2つのデータフレームがあります。 id列にヌル値がある場合は、そこから値を取得するために別のDFを参照する必要があります。私の最終的な所望の結果された状態でScalaで条件付きで2つのデータフレームをマージする
df1.show()
+-----+---+----+-----+
|group|cat| id|value|
+-----+---+----+-----+
| X| A| 1| 20.0|
| X| A| 2| 20.0|
| X| A|null| 55.0|
| X| B| 1| 20.0|
| X| B|null| 55.0|
| Y| A| 3| 20.0|
| Y| A| 4| 20.0|
| Y| A|null| 55.0|
| Y| B| 4| 20.0|
| Y| B|null| 55.0|
+-----+---+----+-----+
df2.show()
+---+-------+
|cat| id|
+---+-------+
| A|1 2 3 4|
| B| 1 4|
+---+-------+
:
+-----+---+-------+-----+
|group|cat| id|value|
+-----+---+-------+-----+
| X| A| 1| 20.0|
| X| A| 2| 20.0|
| X| A|1 2 3 4| 55.0|
| X| B| 1| 20.0|
| X| B| 1 4| 55.0|
| Y| A| 3| 20.0|
| Y| A| 4| 20.0|
| Y| A|1 2 3 4| 55.0|
| Y| B| 4| 20.0|
| Y| B| 1 4| 55.0|
+-----+---+-------+-----+
私はここで別の答えのようなもの(Conditional Join in Spark DataFrame)
val joinCondition = when($"a.id".isNull && $"a.cat" === "b.cat", $"a.id"===$"b.id")
.otherwise($"a.id")
df1.as('a).join(df2.as('b), joinCondition).show
を試みたが、常に空のデータフレームで終わるしました。
正しい結合条件について考えていますか?
はあなたに感謝!私はそれを思っていたことを知っていた、ちょうどそこに行くことができなかった! – ksdaly