例如,路口如何計算Hive中兩個數組的交集和聯合?
select intersect(array("A","B"), array("B","C"))
應該返回
["B"]
和工會
select union(array("A","B"), array("B","C"))
應該返回
["A","B","C"]
有什麼在Hive中做這件事的最好方法是?我檢查了蜂巢文檔,但找不到任何相關信息來執行此操作。
例如,路口如何計算Hive中兩個數組的交集和聯合?
select intersect(array("A","B"), array("B","C"))
應該返回
["B"]
和工會
select union(array("A","B"), array("B","C"))
應該返回
["A","B","C"]
有什麼在Hive中做這件事的最好方法是?我檢查了蜂巢文檔,但找不到任何相關信息來執行此操作。
您的問題解決方案就在這裏。去githubLink,有很多udfs是由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](https ://github.com/klout/brickhouse/blob/master/src/main/java/brickhouse/udf/collect/ArrayIntersectUDF.java),它可以用作'intersect_array(array1,array2,...)'和[ 'array_union(array1,array2,...)([brickhouse.udf.collect.ArrayUnionUDF](https://github.com/klout/brickhouse/blob/master/src/main/java/brickhouse/udf/collect/ArrayUnionUDF.java))。 ..)' –
您是否試過'選擇數組(「A」,「B」)UNION ALL選擇數組(「B」,「C」))? –
[Array intersect Hive]的可能重複(http://stackoverflow.com/questions/21578477/array-intersect-hive) –