【发布时间】:2016-11-16 05:34:24
【问题描述】:
我知道这个问题之前已解决,但可能我的情况有所不同,而且我是新手并没有帮助,因此寻求您的指导 :) 我正在 POC 笔记本电脑设置中学习 PIG。 我有 4 个文本文件,每个文件有大约 50 列,包括一个日期列。这 4 个文本文件基本上包含 4 个不同月份(一月、二月、三月、四月)的数据。 我正在尝试合并这 4 个文本文件,将其保存在 hdfs 中,然后再次从该 UNION 中,我尝试使用日期列将数据拆分为 4 个不同的拆分。 所以首先我开始将 4 个文本文件加载到 4 个不同的变量中 -
jan = LOAD 'hdfs:/data/testing/201201hourly.txt' using PigStorage(',');
feb = LOAD 'hdfs:/data/testing/201202hourly.txt' using PigStorage(',');
mar = LOAD 'hdfs:/data/testing/201203hourly.txt' using PigStorage(',');
apr = LOAD 'hdfs:/data/testing/201204hourly.txt' using PigStorage(',');
然后我对另一个变量做一个 UNION -
month_quad = union jan,feb,mar,apr;
然后我将 UNION 存储到 hdfs -
store month_quad into 'hdfs:/data/big/pigresult/month_quad';
到目前为止一切顺利,我可以看到 hdfs 中的数据加载为 64 mb 块。第一部分包含列和数据。pig screenshot 希望我能够成功地将链接上传到显示 hdfs 中数据的屏幕截图 :)
现在我尝试使用以下脚本进行拆分 -
split month_quad into split_jan IF ((Date,4,6) == '01'), split_feb
IF ((Date,4,6) == '02'), split_mar IF ((Date,4,6)=='03'),
split_apr IF ((Date,4,6) == '04');
我在运行上述脚本时收到错误消息,提示“无效字段投影。投影字段 [日期] 不存在。”
2016-11-16 10:56:21,594 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1025:
<line 7, column 47> Invalid field projection. Projected field [Date] does not exist.
Details at logfile: /home/XXXXX/pig_1479273726378.log
我确实认识到在 jan、feb、mar、apr 中加载数据时我没有定义任何数据类型,但考虑到我拥有的数据有 50 列,我不确定如何解决它。 我正在使用hadoop 2.4。和猪版本 0.15。 请指导我:)
编辑: 通过使用位置符号,我能够使用@Amit 的建议解决这个问题。所以我修改后的拆分脚本如下。它确实给了我两个警告,但成功了。
grunt> split month_quad into split_jan IF (SUBSTRING($1,4,6) == '01'),
>> split_feb IF (SUBSTRING($1,4,6) == '02'),
>> split_mar IF (SUBSTRING($1,4,6) == '03'),
>> split_apr IF (SUBSTRING($1,4,6) == '04');
2016-11-17 08:32:20,050 [main] WARN org.apache.pig.newplan.BaseOperatorPlan - Encountered Warning IMPLICIT_CAST_TO_CHARARRAY 8 time(s).
2016-11-17 08:32:20,050 [main] WARN org.apache.pig.newplan.BaseOperatorPlan - Encountered Warning USING_OVERLOADED_FUNCTION 8 time(s).
【问题讨论】:
-
你试过用month_quad::Date替换Date
-
尝试
DESCRIBE month_quad找出month_quad 的架构。 -
我认为您应该使用“位置表示法”来访问日期列,因为您在声明关系时没有定义架构。根据您的屏幕截图,它将是 1 美元。
-
感谢大家的慷慨回复。 @NirmalRam 谢谢 Nirmal,我试过了,但它再次给出了一个错误,提示“month_quad::Date 不存在。
-
@RobinTrietsch 嗨 Robin,架构未知。
标签: hadoop apache-pig