这是我的代码:
claims = LOAD 'Darshan/automobile_insurance_claims.csv' USING PigStorage(',') AS (claim_id:chararray, policy_master_id:chararray, registration_no:chararray, engine_no:chararray, chassis_no:chararray, customer_id:int, Col6:int,first_name:chararray, last_name:chararray,street:chararray,address:chararray, city:chararray, zip:long,gender:chararray, claim_date:chararray, garage_city:chararray, bill_no:long, claim_amount:double, garage_name:chararray,claim_status:chararray);
grp_all = group claims all;
avg = foreach grp_all generate AVG(claims.Col6);
grp = group claims by claim_id;
m = foreach grp generate group, ((Col6 IS NULL) ? avg : Col6);
结果: dump avg; #33.45
-------------------------------------------------- -------------------------------------------------- -------------------------------- 替换Col6(即Age)中的NULL值时显示以下错误:
造成原因:
标量投影无效:avg:需要从关系中投影列才能将其用作s
ar
在org.apache.pig.parser.LogicalPlanGenerator.var_expr(LogicalPlanGenerator.java:10947)
在org.apache.pig.parser.LogicalPlanGenerator.expr(LogicalPlanGenerator.java:10164)
在org.apache.pig.parser.LogicalPlanGenerator.bin_expr(LogicalPlanGenerator.java:11992)
在org.apache.pig.parser.LogicalPlanGenerator.projectable_expr(LogicalPlanGenerator.java:11104)
在org.apache.pig.parser.LogicalPlanGenerator.var_expr(LogicalPlanGenerator.java:10815)
在org.apache.pig.parser.LogicalPlanGenerator.expr(LogicalPlanGenerator.java:10164)
在org.apache.pig.parser.LogicalPlanGenerator.flatten_genic_item(LogicalPlanGenerator.java:7493)
在org.apache.pig.parser.LogicalPlanGenerator.generate_clause(LogicalPlanGenerator.java:17595)
在org.apache.pig.parser.LogicalPlanGenerator.foreach_plan(LogicalPlanGenerator.java:15987)
在org.apache.pig.parser.LogicalPlanGenerator.foreach_clause(LogicalPlanGenerator.java:15854)
在org.apache.pig.parser.LogicalPlanGenerator.op_clause(LogicalPlanGenerator.java:1933)
在org.apache.pig.parser.LogicalPlanGenerator.general_statement(LogicalPlanGenerator.java:1102)
在org.apache.pig.parser.LogicalPlanGenerator.statement(LogicalPlanGenerator.java:560)
在org.apache.pig.parser.LogicalPlanGenerator.query(LogicalPlanGenerator.java:421)
在org.apache.pig.parser.QueryParserDriver.parse(QueryParserDriver.java:188)
...另外17个
2016-08-08 05:51:07,297 [main]错误org.apache.pig.tools.grunt.Grunt-错误1200:Pig脚本无法解析:
标量投影无效:avg:需要从关系中投影列才能将其用作s
标量。
第11行是:m = foreach grp生成组,(((Col6 IS NULL)?avg:Col6);
最佳答案
达山,这看起来不像是您正在尝试的逻辑问题。您可以将 NULLs 替换为 AVG ,但此处的问题是列的投影。
为解决此问题,请再次重新访问您的代码,您可能会发现AVG处于不同的关系,并且您正在从不同的关系访问它。
在您的代码中,“avg”是一个关系而不是一个列,如果我正确理解它,则在您生成 AVG 的第一个组语句之后,还要生成其他列,这就是 avg 和的方式col6 具有相同的关系。
如果需要,可以在同一FOREACH中应用此替换逻辑。
如果您仍然遇到任何问题,请告诉我。
关于hadoop - 我想用PIG中的AVERAGE替换NULL值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38822204/