在配置单元中使用groupby在数组类型上收集\u集

b91juud3  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(476)

我有下表,其中包含重复的id上的数组的值为每个id,我想找出每个id的唯一值,如何做到这一点?

CREATE TABLE test(
id string,
values array<string>)

当我在下面运行命令时,它抛出错误 collect_set 仅支持基元类型值。

select id, collect_set(values) from ts group by id;

错误:
失败:udfargumenttypeexception仅接受基元类型参数,但数组作为参数1传递。

5lwkijsr

5lwkijsr1#

解决此问题的另一种非正式方法,特别是在具有许多groupby和collect\集的嵌套查询中,是使用concat\ ws(“,values)将数组连接到一个字符串中。

select id, collect_set(concat_ws("", values)) from ts group by id;
u3r8eeie

u3r8eeie2#

正如错误信息所说 Only primitive type arguments are accepted but array was passed as parameter 1. ,使用前需要将数组转换为字符串。
你可以通过使用 explode() 功能。比如:

select 
  id, 
  collect_set(tokens) 
FROM
  ts LATERAL VIEW explode(values) x AS tokens
group by
  id;

我希望这对你有帮助。

相关问题