【问题标题】:Pig filter not working猪过滤器不工作
【发布时间】:2017-02-10 06:36:20
【问题描述】:

我有以下猪脚本,

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 的 DUMP 完全正确,与文件的内容相同,meta 的内容也是如此,但new_d 为空。我可以看到meta 中有is_vta,其值为t,但new_d 仍然为空。为什么元数据没有被正确过滤?我在这里做错了什么?我是 Pig Latin 的新手,无法弄清楚这里可能存在什么问题。

感谢您的所有帮助。

【问题讨论】:

  • 你能试试 new_d = FILTER meta BY (is_vta == '"t"'); ?
  • @dltu 是的,引号引起了问题。 is_vta == '"t"' 以及从文件本身中删除引号都有效。感谢您的帮助:)

标签: hadoop mapreduce apache-pig


【解决方案1】:

简单的方法:

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';

【讨论】:

  • 是的,引号引起了问题。 is_vta == '"t"' 以及从文件本身中删除引号都有效。感谢您的帮助:)
【解决方案2】:

我认为引号引起了问题:这里有两种处理方式

1:使用储钱罐处理报价:休息你的报价应该有效。

REGISTER 'piggybank.jar'  -- > this jar handles quotes by default. 

A = LOAD 'fil.csv'  using org.apache.pig.piggybank.storage.CSVExcelStorage(',') as (---Your Schema --- );

或 2:

使用正则表达式并修剪引号。 Remove single quotes from data using Pig

【讨论】:

  • 是的,引号引起了问题。 is_vta == '"t"' 以及从文件本身中删除引号都有效。感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 2023-03-04
相关资源
最近更新 更多