我正在使用Piggybank的Over函数来获取行的滞后时间
res= foreach (group table by fieldA) {
Aord = order table by fieldB;
generate flatten(Stitch(Aord, Over(Aord.fieldB, 'lag'))) as (fieldA,fieldB,lag_fieldB) ;}
这正常工作,当我执行转储时,我得到了预期的结果,问题是当我想使用lag_fieldB进行任何比较或转换时,出现数据类型问题。
如果我进行描述,它将返回fieldA: long,fieldB: chararray,lag_fieldB: NULL
我是PIG的新手,但我已经尝试过将其转换为chararray并使用ToString(),并且不断收到如下错误:
错误1052:无法将字节数组转换为字符数组
错误1051:无法转换为字节数组
感谢您的帮助
答案 0 :(得分:0)
好好看看Over函数的代码,我发现您可以实例化Over类来设置返回类型。对我有用的是:
DEFINE ChOver org.apache.pig.piggybank.evaluation.Over('chararray');
res= foreach (group table by fieldA) {
Aord = order table by fieldB;
generate flatten(Stitch(Aord, ChOver(Aord.fieldB, 'lag'))) as (fieldA,fieldB,lag_fieldB) ;}
现在描述正在告诉我
fieldA: long,fieldB: chararray,lag_fieldB: chararray
我能够按预期使用列,希望这可以为其他人节省一些时间。