我对pig datetime数据类型有问题。我试图使用,但格式不正常工作。我不明白错误是什么:使用的代码如下
`records = LOAD '/tmp/project/sample.csv' USING PigStorage(',') AS (CUSTOMER_ID:in`t,READING_DATETIME:chararray,CALENDER_KEY:int,EVENT_KEY:int,GENERAL_SUPPLY_KWH:float,CONTROLLED_LOAD_KWH:float,GROSS_GENERATION_KWH:float,NET_GENERATION_KWH:float,OTHER_KWH:float);
test = FOREACH records GENERATE CUSTOMER_ID,READING_DATETIME;
dates= FOREACH test GENERATE CUSTOMER_ID,ToDate(READING_DATETIME,'dd-MM-yyyy HH:mm') AS READING_DATETIME;
sample.csv中的示例数据如下(仅粘贴在此处的前两列)
CUSTOMER_ID READING_DATETIME
10017574 31-05-2013 18:30
10017574 10-06-2013 05:30
10017574 29-06-2013 04:30
10017574 04-07-2013 20:30
10017574 05-07-2013 17:00
10017574 12-07-2013 10:30
10017574 13-07-2013 20:00
10017574 16-07-2013 13:00
10017574 19-07-2013 20:00
以上命令执行正常。另外,当我使用descripe表示“日期”时,它会返回:
grunt> DESCRIBE dates
dates: {CUSTOMER_ID: int,READING_DATETIME: datetime}
现在当我使用
toPrint = LIMIT dates 5;
DUMP toPrint;
2016-09-15 05:43:39,000 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - Some jobs have failed! Stop running all dependent jobs
2016-09-15 05:43:39,013 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1066: Unable to open iterator for alias toPrint. Backend error : Invalid format: "READING_DATETIME"
我已经多次验证了字符串格式。甚至我还检查了oracle简单数据格式,它在joda类中用于pig使用的日期时间。我对同一数据尝试了几种组合。我试过上网。问题仍未解决。对我来说似乎是件很愚蠢的事,但却解决不了。
1条答案
按热度按时间bprjcwpo1#
从您附加的示例数据来看,数据看起来不像是逗号分隔的。在load语句中,您使用''作为分隔符。为了解决这个问题,你有两个选择。
将输入文件转换为逗号分隔的输入文件或
使用正确的分隔符加载数据。
我使用了tab作为分隔符,效果很好
数据
脚本
输出