我对猪环境很安静。我试图以两种方式实现我的pig脚本文件。
我
data = LOAD 'sample2.txt' USING PigStorage(',') as(campaign_id:chararray,date:chararray,time:chararray,display_site:chararray,placement:chararray,was_clicked:int,cpc:int,keyword:chararray);
distinct_data = DISTINCT data;
val = foreach distinct_data generate campaign_id,date,time,UPPER(keyword),display_site,placement,was_clicked,cpc;
val1 = foreach val generate campaign_id,date,time,TRIM(keyword),display_site,placement,was_clicked,cpc;
val2 = foreach val1 generate campaign_id,REPLACE(date, '-', '/'),time,keyword,display_site,placement,was_clicked,cpc;
dump val2;
我收到错误:
2016-09-29 02:45:40,826 INFO org.apache.pig.Main:Apache Pig版 0.10.0-cdh4.2.1(rexported)编译2013年4月22日,2016-09-29 12:04:54 02:45:40,827 INFO org.apache.pig.Main:将错误消息记录到: /home/training/training_materials/analyst/exercises/pig_etl/pig_1475131540824.log 2016-09-29 02:45:42,371 ERROR org.apache.pig.tools.grunt.Grunt:ERROR 1025:无效字段 投影。架构中不存在投影字段[keyword]: CAMPAIGN_ID:chararray,日期:chararray,时间:chararray,org.apache.pig.builtin.upper_keyword_12:chararray,display_site:chararray,摆放位置:chararray,was_clicked:INT,每次点击费用:int类型。 日志文件的详细信息:/home/hduser/pig_etl/pig_1475131540824.log
但是当我将UPPER,TRIM和REPLACE集成在一个语句中时,它可以工作:
II。
data = LOAD 'sample2.txt' USING PigStorage(',') as(campaign_id:chararray,date:chararray,time:chararray,display_site:chararray,placement:chararray,was_clicked:int,cpc:int,keyword:chararray);
distinct_data = DISTINCT data;
val = foreach distinct_data generate campaign_id,REPLACE(date, '-', '/'),time,TRIM(UPPER(keyword)),display_site,placement,was_clicked,cpc;
dump val;
所以,我只是希望有人向我解释为什么我的方法不起作用,错误信息是什么。
答案 0 :(得分:0)
当您在TRIM
中应用val1
时,没有任何内容称为" keyword
"在val
。
注意当您应用任何函数使用别名时,您可以避免错误..
或在创建新关系之前,最好使用 describe
,以便架构清晰明白。
解决方案将是:
data = LOAD 'sample2.txt' USING PigStorage(',') as(campaign_id:chararray,date:chararray,time:chararray,display_site:chararray,placement:chararray,was_clicked:int,cpc:int,keyword:chararray);
distinct_data = DISTINCT data;
val = foreach distinct_data generate campaign_id,date,time,UPPER(keyword) as keyword,display_site,placement,was_clicked,cpc;
val1 = foreach val generate campaign_id,date,time,TRIM(keyword) as keyword,display_site,placement,was_clicked,cpc;
val2 = foreach val1 generate campaign_id,REPLACE(date, '-', '/') as date,time,keyword,display_site,placement,was_clicked,cpc;
dump val2;