猪过滤器不工作
Pig filter not working
我有下面的猪脚本,
meta_file = LOAD 'meta_file' USING PigStorage(',');
DUMP meta_file;
meta = FOREACH meta_file GENERATE (chararray)[=10=] AS is_vta:chararray, (chararray) AS id:long;
DUMP meta;
new_d = FILTER meta BY (is_vta == 't');
DUMP new_d;
meta_file
的内容:
"t","7181397"
"t","6331589"
"f","7266217"
"t","6051440"
"t","6901437"
"t","6805292"
"f","7144764"
"t","6820265"
"f","7515321"
"t","4777938"
meta_file
的 DUMP 完全没问题,与文件的内容相同,meta 的内容也是如此,但 new_d
是空的。我可以看到 meta
中有 is_vta
,值为 t
,但 new_d
仍然是空的。为什么 meta 没有被正确过滤?我在这里做错了什么?我是 Pig Latin 的新手,无法弄清楚这里可能是什么问题。
感谢您的帮助。
我认为引号引起了问题:这里有两种处理方式
1:使用 piggybank 处理报价:休息你的报价应该工作。
REGISTER 'piggybank.jar' -- > this jar handles quotes by default.
A = LOAD 'fil.csv' using org.apache.pig.piggybank.storage.CSVExcelStorage(',') as (---Your Schema --- );
或
2:
使用正则表达式和 trim 引号。
简单的方法:
new_d = FILTER meta BY is_vta MATCHES '.*t.*';
另一个解决方案:
remquotes = FOREACH meta GENERATE REPLACE([=11=], '\"', '') AS is_vta:chararray, id;
new_d = FILTER remquotes BY is_vta == 't';
我有下面的猪脚本,
meta_file = LOAD 'meta_file' USING PigStorage(',');
DUMP meta_file;
meta = FOREACH meta_file GENERATE (chararray)[=10=] AS is_vta:chararray, (chararray) AS id:long;
DUMP meta;
new_d = FILTER meta BY (is_vta == 't');
DUMP new_d;
meta_file
的内容:
"t","7181397"
"t","6331589"
"f","7266217"
"t","6051440"
"t","6901437"
"t","6805292"
"f","7144764"
"t","6820265"
"f","7515321"
"t","4777938"
meta_file
的 DUMP 完全没问题,与文件的内容相同,meta 的内容也是如此,但 new_d
是空的。我可以看到 meta
中有 is_vta
,值为 t
,但 new_d
仍然是空的。为什么 meta 没有被正确过滤?我在这里做错了什么?我是 Pig Latin 的新手,无法弄清楚这里可能是什么问题。
感谢您的帮助。
我认为引号引起了问题:这里有两种处理方式
1:使用 piggybank 处理报价:休息你的报价应该工作。
REGISTER 'piggybank.jar' -- > this jar handles quotes by default.
A = LOAD 'fil.csv' using org.apache.pig.piggybank.storage.CSVExcelStorage(',') as (---Your Schema --- );
或 2:
使用正则表达式和 trim 引号。
简单的方法:
new_d = FILTER meta BY is_vta MATCHES '.*t.*';
另一个解决方案:
remquotes = FOREACH meta GENERATE REPLACE([=11=], '\"', '') AS is_vta:chararray, id;
new_d = FILTER remquotes BY is_vta == 't';