这是我的密码:
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平均值#33.45
4条答案
按热度按时间q5iwbnjs1#
达珊,这看起来不像是你正在尝试的逻辑问题。可以用avg替换null,但这里的问题是列的投影。
为了解决这个问题,请再次访问您的代码,您可能会发现,平均值是在不同的关系,您访问它从不同的关系。
在你的代码中,“avg”是一个关系而不是一列,如果我理解正确的话,在你的第一个group语句生成avg之后,也生成其他列,这就是avg和col6在同一个关系中的方式。
加载数据
根据需要对数据进行分组
计算平均值并生成其他列
如果需要,可以在同一个foreach中应用这个replace逻辑。
如果你还面临任何问题,请告诉我。
zdwk9cvp2#
下面是我查询的最终代码:
以下是数据集automobile\u insurance\u claims.csv的链接
jjjwad0x3#
--替换列6中的空值时显示以下错误(即年龄):由以下原因引起:
无效的标量投影:avg:需要从关系中投影列才能用作标量
在org.apache.pig.parser.logicalplanggenerator.var\u expr(logicalplanggenerator。java:10947)
位于org.apache.pig.parser.logicalplangerator.expr(logicalplangerator。java:10164)
在org.apache.pig.parser.logicalplanggenerator.bin\u expr(logicalplanggenerator。java:11992)
位于org.apache.pig.parser.logicalplangerator.projectable\u expr(logicalplangerator。java:11104)
在org.apache.pig.parser.logicalplanggenerator.var\u expr(logicalplanggenerator。java:10815)
位于org.apache.pig.parser.logicalplangerator.expr(logicalplangerator。java:10164)
在org.apache.pig.parser.logicalplangerator.flatten生成的\u项(logicalplangerator。java:7493)
在org.apache.pig.parser.logicalplangerator.generate\子句(logicalplangerator。java:17595)
在org.apache.pig.parser.logicalplangerator.foreach\u计划(logicalplangerator。java:15987)
在org.apache.pig.parser.logicalplangerator.foreach\ u子句(logicalplangerator。java:15854)
在org.apache.pig.parser.logicalplangerator.op\子句(logicalplangerator。java:1933)
在org.apache.pig.parser.logicalplangerator.general\语句(logicalplangerator。java:1102)
位于org.apache.pig.parser.logicalplangerator.statement(logicalplangerator。java:560)
在org.apache.pig.parser.logicalplangerator.query(logicalplangerator。java:421)
在org.apache.pig.parser.queryparserdriver.parse(queryparserdriver。java:188)
... 还有17个
2016-08-08 05:51:07297[main]error org.apache.pig.tools.grunt.grunt-错误1200:pig脚本解析失败:
无效的标量投影:avg:需要从关系中投影列才能用作标量。
第11行是:m=foreach grp generate group,((col6为空)?平均值:col6);
ewm0tg9j4#
得到错误的原因是avg是一个关系,需要在关系avg中使用一列。请更正上一个pig语句以引用关系avg中的第一列,如下所示
或者,您可以命名列并引用它,如下所示