map_zip_with:合并两个Map
速查结论
map_zip_with(map1, map2, function) 是 Spark SQL 中用于将两个映射按相同键应用函数后合并为单一映射的函数。
语法
map_zip_with(map1, map2, function)
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| map1 | MAP | 第一个映射(Map)对象 |
| map2 | MAP | 第二个映射(Map)对象 |
| function | LAMBDA | 接收 (k, v1, v2) 三个参数的 lambda 函数,k 为键,v1 和 v2 分别为两个映射中对应键的值。对于仅在一个映射中出现的键,缺失的值以 NULL 传入 |
示例
> SELECT map_zip_with(map(1, 'a', 2, 'b'), map(1, 'x', 2, 'y'), (k, v1, v2) -> concat(v1, v2));
{1:"ax",2:"by"}
> SELECT map_zip_with(map('a', 1, 'b', 2), map('b', 3, 'c', 4), (k, v1, v2) -> coalesce(v1, 0) + coalesce(v2, 0));
{"a":1,"b":5,"c":4}
常见报错与避坑指南
- 如果输入映射包含重复的键,只有第一个条目会传递到 lambda 函数中,后续重复键会被忽略。
- 对仅在一个映射中存在的键,缺失侧的值传入 NULL,建议在 lambda 中使用
coalesce处理 NULL 值以避免意外结果。 - lambda 函数必须接受恰好三个参数
(k, v1, v2),参数数量不匹配将导致AnalysisException。
Since: 3.0.0
📱关注公众号
「数据仓库技术」文章同步更新,不错过每一篇干货

💬加群交流
备注「数据仓库技术」加入社群,每日一道大厂SQL真题
