【问题标题】:Hive : Concat a mapHive:连接地图
【发布时间】:2014-11-03 21:02:42
【问题描述】:

当我尝试连接地图时,我在 Hive 中遇到了一个小麻烦

假设我有类似的东西:

var 1 | var 2

x | map(key1:value1)

x | map(key2:value2)

x | map(key3:value3)

y | map(key4:value4)

我想要得到的,是这样的

var 1 | var 2

x | map(key1:value1 ; key2:value2; key3:value3)

y | map(key4,value4)

类似于地图连接的东西。

如何继续使用 Hive?

【问题讨论】:

    标签: hadoop hive hql


    【解决方案1】:

    使用这个查询...

    select var1,collect_set(CONCAT_WS(',',map_keys(var2),map_values(var2))) as var2 from example group by var1;

    这会让你得到这样的输出......

    var1 | var2

    x | ["key1,value1","key2,value2","key3,value3"]

    y | ["key4,value4"]

    【讨论】:

    • 这个方法有个小麻烦,因为我的地图看起来像:{place:10},我得到了这个错误:函数 CONCAT_WS 的参数 3 必须是“字符串或数组”,但是“找到数组”。
    • 不幸的是,ListType 不能转换为 PrimitiveType(如 String)。我能想到的唯一解决方案是将 map 定义为 String,String。
    • 是的。这也是我找到的最好的解决方案,谢谢!以防万一,如果我们有另一个基本类型的字符串,我们应该使用select var1,collect_set(CONCAT_WS(',',map_keys(var2),cast(map_values(var2) as String))) as var2 from example group by var1;
    猜你喜欢
    • 2015-08-01
    • 1970-01-01
    • 2018-06-04
    • 2021-03-04
    • 2023-03-14
    • 2014-09-25
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多