Hive:如何将字符串转换为数组数组

Posted

技术标签:

【中文标题】Hive:如何将字符串转换为数组数组【英文标题】:Hive : How to convert string to array of arrays 【发布时间】:2021-01-21 23:18:36 【问题描述】:

我有一个存储为字符串的配置单元列值

[[1,2],[3,4,8],[5,6,7,9]]

我需要找出每个内部数组的长度。我该怎么办?

基本上我需要一个汇总每个内部数组大小的查询。如果将此列存储为数组数组,我会做这样的事情

select sum(size(innerArray)) from myTab lateral view explode (mycol) arr as innerArray;

但是现在当我尝试上述方法时,我得到了

FAILED: UDFArgumentException explode() takes an array or a map as a parameter

【问题讨论】:

【参考方案1】:

因为你的初始数组不是真正的数组,是字符串,需要解析分解:

with mytable as(
select '[[1,2],[3,4,8],[5,6,7,9]]' as mycol
)

select mycol as original_string,
       innerArray_str, 
       --split inner array and get size
       size(split(innerArray_str,',')) inner_array_size
from mytable
    --explode upper array
    --replace `],` (allow spaces before comma) with `,,,` and remove all `[` and `]`, split using ,,, as a delimiter 
     lateral view outer explode(split(regexp_replace(regexp_replace(mycol,'\\] *,',',,,'),'\\[|\\]',''),',,,') )e as innerArray_str 

结果:

original_string             innerarray_str  inner_array_size
[[1,2],[3,4,8],[5,6,7,9]]   1,2             2
[[1,2],[3,4,8],[5,6,7,9]]   3,4,8           3
[[1,2],[3,4,8],[5,6,7,9]]   5,6,7,9         4

现在您可以添加sum()group by

【讨论】:

以上是关于Hive:如何将字符串转换为数组数组的主要内容,如果未能解决你的问题,请参考以下文章

如何将数组<string>转换为hive中的字符串

我们如何在 hive 中将字符串转换为数组?

如何将字符串转换为hive中的struct数组并进行爆炸?

Hive数组的字符串转换为int数组

如何将字符串转换为配置单元中的结构数组并爆炸?

将数组<字符串>转换为字符串[重复]