如何计算 Hive 中两个数组的交集和并集?

Posted

技术标签:

【中文标题】如何计算 Hive 中两个数组的交集和并集?【英文标题】:How to compute the intersections and unions of two arrays in Hive? 【发布时间】:2016-03-22 03:57:53 【问题描述】:

比如路口

select intersect(array("A","B"), array("B","C"))

应该返回

["B"]

和工会

 select union(array("A","B"), array("B","C"))

应该返回

["A","B","C"]

在 Hive 中制作这个的最佳方法是什么?我检查了 hive 文档,但找不到任何相关信息。

【问题讨论】:

你试过select array("A","B") UNION ALL select array("B","C"))吗? Array intersect Hive的可能重复 【参考方案1】:

您的问题解决方案就在这里。转到githubLink,有很多 udf 是由 klout 创建的。下载、创建 JAR 并将 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"]

【讨论】:

在上面的链接中找到的正确函数应该是brickhouse.udf.collect.ArrayIntersectUDF 可以用作intersect_array(array1, array2, ...) 和brickhouse.udf.collect.ArrayUnionUDF 用作array_union(array1, array2, ...)

以上是关于如何计算 Hive 中两个数组的交集和并集?的主要内容,如果未能解决你的问题,请参考以下文章

PHP数组的几个操作,求并集,交集,差集,数组

Perl-求交集和并集(Nvidia2018笔试)

空格是交集还是并集

如何求两个数组的交集??

java数组的交集和并集

ES6数组:两个数组或数组对象取并集、交集、差集