使用 hql 将列表中的列转换为数组和数组到 hive 中的列表

Posted

技术标签:

【中文标题】使用 hql 将列表中的列转换为数组和数组到 hive 中的列表【英文标题】:Convert a column from list to array and array to list in hive using hql 【发布时间】:2021-01-13 00:32:31 【问题描述】:

我想使用 hql 将以下列从列表转换为数组

list array
[10:20] [10,20]
[30:40:50] [30,40,50]

我也想把它从数组转换成列表

array list
[10,20] [10:20]
[30,40,50] [30:40:50]

【问题讨论】:

【参考方案1】:

数组列表演示:

with mytable as (
select stack (2,
array(10,20),
array(30,40,50)
) as myarray
)

select myarray, concat('[',concat_ws(':',collect_list(string(element))),']') as list
  from mytable
       lateral view explode(myarray) e as element
       group by myarray;

结果:

myarray     list
[10,20]     [10:20]
[30,40,50]  [30:40:50]

列表到数组演示:

with mytable as (
select stack (2,
'[10:20]',
'[30:40:50]'
) as list
)

select list, collect_list(int(element)) myarray
  from mytable
       lateral view explode (split(regexp_replace(list,'\\[|\\]',''),':')) e as element
  group by list;

结果:

list        myarray
[30:40:50]  [30,40,50]
[10:20]     [10,20]

如果你对array<string>没问题,那么转换就简单多了:

with mytable as (
select stack (2,
'[10:20]',
'[30:40:50]'
) as list
)

select list, split(regexp_replace(list,'\\[|\\]',''),':') myarray
  from mytable;

结果:

list        myarray
[10:20]     ["10","20"]
[30:40:50]  ["30","40","50"]

【讨论】:

以上是关于使用 hql 将列表中的列转换为数组和数组到 hive 中的列表的主要内容,如果未能解决你的问题,请参考以下文章

使用 pyspark 将 Spark 数据框中的列转换为数组 [重复]

如何在python中访问列表列表中的列

如何将 Pandas Dataframe 中的字符串转换为列表或字符数组?

将数组和元组元素转换为 Pandas 数据框中的列 [重复]

将字典中的数组转换为数组列表

将对象数组转换为对象对象