UDTF在使用过程中的一些限制:
1. 在select语句中不能有其他表达式,例如SELECT pageid, explode(adid_list ) AS myCol. . . 这种语句是不支持的
2. UDTF不能嵌套使用,例如:SELECT explode(explode(adid_list )) AS myCol. . . 这种语句也是不支持的
3. GROUP BY 、CLUST ER BY、DI ST RI BUT E BY和SORT BY是不支持的,例如:SELECT explode(adid_list ) AS myCol . . . GROUP BY myCol这种语句是不支持的
LateralView:
LateralView是和UDTF结合使用的。LateralView首先对于表格的每一行应用UDTF,然后将UDTF产生的结果与UDTF的输入行进行拼接。
LaterView的例子:
select column,column,column,column,......from table lateral view udtf(arg,arg,arg,arg,......) aliasTabel as column,column,column,...;
UDTF的编写步骤:
1.在initialize()函数中进行预处理,该函数传入的参数是ObjectInspector[],用来检查自定义函数传入的参数;
真正的处理过程在process函数中,在process中,每一次forward()调用产生一行;如果产生多列可以将多个列的值放在一个数组中,然后将该数组传入到forward()函数。