如何在 Spark 中连接 Map 类型值时处理空值

3

我正在尝试使用concat_map()函数连接两个Map类型的列。我的问题是当我尝试连接一个null值和一个Map时,我期望得到非null的Map值,但实际返回了null。

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个回答

1
map_concat 的行为是,如果有一个操作数为空,则返回空。
如果您的列可为空,可以使用 coalesce 将 null 替换为空 map。
DF.select(
   col("_1"),
   map_concat(
       coalesce(col("m2"), map()),
       coalesce(col("m3"), map())
   ).as("result")
).show()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接