#scala #apache-spark #null
Вопрос:
Я пытаюсь объединить два столбца типа карты с помощью функции concat_map(). Моя проблема в том, что когда я пытаюсь соединить нуль и карту, я получаю нуль, когда ожидаю получить значение карты без значения.
val DF_concatenated= DF.select(col("_1"), map_concat(col("m2"),col("m3"))).show()
Я пытаюсь получить из этого фрейма данных DF:
--- ---------- ----------------
| _1| m2| m3|
--- ---------- ----------------
| 3|[c -> III]| null|
| 1| [a -> I]| [one -> un]|
| 4| null|[four -> quatre]|
| 2| [b -> II]| [two -> deux]|
--- ---------- ----------------
к этому кадру данных DF_concatenated:
--- ----------------------
| _1| map_concat(m2, m3) |
--- ----------------------
| 3| [c -> III] |
| 1| [a -> I, one -> un] |
| 4| [four -> quatre] |
| 2|[b -> II, two -> deux]|
--- ----------------------
но в итоге у меня получается такой результат:
--- ----------------------
| _1| map_concat(m2, m3) |
--- ----------------------
| 3| null |
| 1| [a -> I, one -> un] |
| 4| null |
| 2|[b -> II, two -> deux]|
--- ----------------------
Ответ №1:
Поведение map_concat
таково, что если даже один операнд равен нулю, он возвращает значение null.
Если ваши столбцы допускают значения null, вы можете использовать coalesce
для замены значения null пустой картой.
DF.select(
col("_1"),
map_concat(
coalesce(col("m2"), map()),
coalesce(col("m3"), map())
).as("result")
).show()