清管器过滤器不工作

i7uq4tfw  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(449)

我有下面的Pig剧本,

meta_file = LOAD 'meta_file' USING PigStorage(',');

DUMP meta_file;

meta = FOREACH meta_file GENERATE (chararray)$0 AS is_vta:chararray, (chararray)$1 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 与文件的内容完全相同,meta的内容也一样,但是 new_d 是空的。我可以看到有 is_vtameta 有价值观 t ,但仍然 new_d 是空的。为什么元没有被正确过滤?我做错什么了?我对Pig拉丁语不熟悉,不知道这里可能有什么问题。
谢谢你的帮助。

g52tjvyc

g52tjvyc1#

我认为引用引起了问题:这里有两种处理方法
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:
使用regex和trim引号。使用pig从数据中删除单引号

xmjla07d

xmjla07d2#

简单方法:

new_d = FILTER meta BY is_vta MATCHES '.*t.*';

另一种解决方案:

remquotes = FOREACH meta GENERATE REPLACE($0, '\\"', '') AS is_vta:chararray, id;

new_d = FILTER remquotes BY is_vta == 't';

相关问题