2016-03-22 412 views
0

例如,路口如何計算Hive中兩個數組的交集和聯合?

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

應該返回

["B"] 

和工會

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

應該返回

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

有什麼在Hive中做這件事的最好方法是?我檢查了蜂巢文檔,但找不到任何相關信息來執行此操作。

+0

您是否試過'選擇數組(「A」,「B」)UNION ALL選擇數組(「B」,「C」))? –

+0

[Array intersect Hive]的可能重複(http://stackoverflow.com/questions/21578477/array-intersect-hive) –

回答

2

您的問題解決方案就在這裏。去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"] 
+1

在上面的鏈接中找到的正確函數應該是[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))。 ..)' –