数组交集 Hive

4

我有两个Hive中的字符串数组,如下所示:

{'value1','value2','value3'}
{'value1', 'value2'}

我想合并数组并去除重复项,结果如下:

{'value1','value2','value3'}

我该如何在Hive中操作呢?

为什么这被标记为Java? - Philipp Sander
这不是交集。 - chenatu
2个回答

6
一种本地解决方案可能是:
SELECT id, collect_set(item)
FROM table
LATERAL VIEW explode(list) lTable AS item
GROUP BY id;

首先使用lateralview进行拆分,然后使用collect_set进行分组并去除重复项。

5
你需要一个UDF来完成此操作。Klout在brickhouse包下有许多开源的HivUDFS。这是github链接。它们有一堆UDF完全满足你的需求。下载、构建并添加JAR。这是一个例子。
CREATE TEMPORARY FUNCTION combine AS 'brickhouse.udf.collect.CombineUDF';
CREATE TEMPORARY FUNCTION combine_unique AS 'brickhouse.udf.collect.CombineUniqueUDAF';

select combine_unique(combine(array('a','b','c'), array('b','c','d'))) from reqtable;

OK
["d","b","c","a"]

1
还有'intersect_array',可以给出实际共同元素('b','c')。Sayan,非常感谢您宣传Brickhouse!!!希望您觉得它有用。 - Jerome Banks
感谢这个出色的软件包。它有一些非常棒的功能。我尝试了combine_unique,但它不接受两个数组。因此采用了这个解决方案。维基百科需要修改。 - sayan dasgupta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接