上一篇说到UTD函数,今天就说下UDTF自定义函数
UDTF和UDF不同点在于,UDTF是一对多,而UDF是一对一;
UDTF(User-Defined Table-Generating Function):用户定义表生成函数,用来解决输入一行,输出多行的场景。
编写UDTF需要继承GenericUDTF类,然后重写initialize方法和process方法和close方法
方法用途:
initialize方法主要是初始化返回的列和返回的列类型
process方法对输入的每一行进行操作, 他通过调用forward()返回一行或者多行数据
close方法在process方法结束后调用,用于进行一些其他的操作,只执行一次
下载依赖包到pom.xml已经说过;
创建类并继承GenericUDTF
重写initialize方法、process方法和close方法
当有一行多列时,通过调用forward()分割后有几列就返回几列数据
public class MyUdtfFun extends GenericUDTF {
@Override
public StructObjectInspector initialize(StructObjectInspector argOIs) throws UDFArgumentException {
//设置新的列名
ArrayList<String> columns = new ArrayList<>();
//有两列时,有几列,添加几列
columns.add("like1");
columns.add("like2");
//设置每列的列类型,有几列就设置几列的列类型
ArrayList<ObjectInspector> columnType = new ArrayList<ObjectInspector>();
columnType.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);
columnType.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);
return Objec