最近有这样一个需求,表A有一列集合Array,表B有一列集合Array,然后如果A中的集合和B中的集合有重复的项就保留,换言之就是要求表A中的集合和表B中集合的交集。
例如:
输入>>: select array_intersect(array('a','b'),array('b','c'))
输出>>: ['b']
据了解,hive没有现成的对集合做交集的函数。因此自定义了对集合的交集、并集、差集的函数。代码及注册如下。
1、数组交集
package com.star.hive;
import org.apache.hadoop.hive.ql.exec.UDF;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
public class ArrayIntersect extends UDF {
public ArrayList<String> evaluate(ArrayList<String> input1, ArrayList<String> input2) {
if (input1 == null || input2 == null) {
return new ArrayList<>();
}
Set<String> set1 = new HashSet<>(input1);
Set<String> set2 = new HashSet<>(inp