如何计算 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 中两个数组的交集和并集?的主要内容,如果未能解决你的问题,请参考以下文章