如何将地图转换为蜂巢中的列?

Posted

技术标签:

【中文标题】如何将地图转换为蜂巢中的列?【英文标题】:How to convert map to column in hive? 【发布时间】:2019-12-19 13:42:10 【问题描述】:

假设我们有

columnsA        columnsB
   1           'A':22,'B':11
   2           'A':13,'C':24

如何转换成

columnsA   A   B   C
   1       22  11  NA
   2       13  NA  24

【问题讨论】:

【参考方案1】:

使用Map[key] operator

select m['A'] A,  
       m['B'] B, 
       m['C'] C 
  from (select str_to_map("A:22,B:11") m) s;

返回:

A       B       C
22      11      NULL

如果您需要 'NA' 而不是 NULL,请使用 NVL() 函数:

NVL(m['A'],'NA') as A

【讨论】:

非常感谢!并且 B 列中有 200 多个离散值。有没有其他办法? @takashi 另一种方式可以使用lateral view outer explode(mapCol) s as key, val;,就像在这个答案中一样:***.com/a/54960324/2700344 但之后您还需要根据键将 (key, val) 转置到列,这可以是使用条件聚合完成。使用 map[key] 会更简单高效

以上是关于如何将地图转换为蜂巢中的列?的主要内容,如果未能解决你的问题,请参考以下文章

请帮助将字符串转换为蜂巢中的时间戳

蜂巢中的时间戳?

如何将文本转换为DataGridView中的列?

如何将 Pandas 系列中的多个字典键转换为 DataFrame 中的列?

如何将矩阵转换为 R 中的列向量列表?

如何将熊猫系列的列值转换为Python中的列表?