我正在尝试实现udf函数来处理各种源/输入文件。输入文件的列数不同。我的目的是要有通用的自定义函数。每次运行pig脚本都会处理一种类型的输入文件(由“|”分隔的记录数相同)。
udf函数应该读取由分隔符(|)分隔的所有输入记录,并根据某些条件生成一个包含两个元组的包,例如输入(1,2,3,4,5,6)输出a){(1,3)、(2,4,5,6)}或b){(2,3,4)、(1,5,6)}
我无法扩展outputschema方法来处理不同大小元组的创建。无法将额外的参数传递给outputschema方法。不能使用作为evalfunc类定义的一部分定义的临时变量,因为每次运行时它的值都为null。
有什么提示吗?谢谢您
更新:
我使用grunt执行下面的命令,inputschema是在“as”之后提供的
sourceData = foreach sourceData generate com.pig.Data('test.json', *) as (t:(s:(VIN: chararray,Birthdate: chararray), n:(name: chararray,customerId: chararray,Mileage: chararray,Fuel_Consumption: chararray)));
自定义项代码在这里。。。
public Schema outputSchema(Schema input) {
(第233行)system.out.println(“
2条答案
按热度按时间vyswwuz21#
-----”+input.getfields().size());
错误:
更新2:
好的,输入模式是从上一个pig命令传播的。。。
sourcedata=load'test.csv',使用pigstorage(',')作为(vin:chararray,生日:chararray,姓名:chararray,客户ID:chararray,里程:chararray,油耗:chararray);
sourcedata=foreach sourcedata generate com.pig.data'test_data_desc.json',*)as(t:(s:(vin:chararray,birthdate:chararray),n:(name:chararray,customerid:chararray,miliege:chararray,fuel\u consumption:chararray));
这是没有用的-(因为它不可能传播任何额外的属性或它不可能在outputschema方法中创建任何其他更复杂的逻辑-(
ljo96ir52#
在outputschema函数中,您可以访问输入模式,并使用输入模式信息根据输入动态生成输出模式(如果输入以某种方式反映了预期的输出)。例子:
我希望这有帮助。