在Apache Pig中实现UPPER,TRIM和REPLACE

时间:2016-09-29 07:15:42

标签: replace apache-pig trim uppercase

我对猪环境很安静。我试图以两种方式实现我的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;

所以,我只是希望有人向我解释为什么我的方法不起作用,错误信息是什么。

1 个答案:

答案 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;