我无法使这个简单的过滤器工作。它在我宣布一个模式之前工作(省略了chararray部分);但是现在它不起作用,我知道该字段绝对是一个字符串值。有人说'完整'而其他人说'不完整'.....它会读取所有记录,但在我过滤时没有找到;
A = load 'file' USING PigStorage('|');
B = FOREACH A GENERATE $48 as wr_sts:chararray,$49 as wr_sts_qlfctn:chararray, $50 as comment:chararray, $17 as id:chararray;
C = FILTER B BY wr_sts == 'COMPLETE';
这不会带回任何我知道存在的记录......
当我转储B时,它实际上会将正确的记录转储到屏幕上。因此过滤器关系是肯定会被破坏的。
答案 0 :(得分:0)
当您在AS
数据时使用LOAD
子句时,Pig会将您的数据解析为正确的数据类型并应用您提供的架构。当您在AS
语句中使用GENERATE
子句时,Pig会将不强制转换为指定的类型;它只是更新架构。
因此,虽然Pig认为wr_sts
是chararray
,但在内部它仍然存储为bytearray
,并且比较总是失败。如果您要执行以下操作,它将按预期运行:
B = FOREACH A GENERATE (chararray) $48 as wr_sts, $49 as wr_sts_qlfctn:chararray, $50 as comment:chararray, $17 as id:chararray;
请注意,$48
会转换为chararray
。这不仅告诉Pig在解析脚本时将其视为模式中的chararray
,它实际上将底层Java对象从byte[]
转换为String
。