2016-09-15 84 views
0

我有一个pig datetime数据类型的问题。我试图使用,但格式不能正常工作。我不明白的错误是:所使用的代码如下Apache Pig日期时间 - 无效格式错误

`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 

上述命令正确执行。此外,当我用描述“日期”, 它返回:

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使用的简单数据格式中检查了猪使用的日期时间。 我已经尝试了相同数据的几种组合。在网上尝试brwosing。仍然问题没有解决。似乎对我来说是一件非常愚蠢的事情,但却无法解决它。

回答

0

从附加的示例数据看,数据看起来不像逗号分隔。在您的加载语句中,您使用','作为分隔符。 为了解决这个问题,你有2个选项。

  1. 输入文件转换为以逗号分隔的输入文件 或者
  2. 使用正确的分隔符来加载数据。

我已经使用选项卡作为分隔符,它的工作原理如下

fine.See数据

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 

脚本

records = LOAD 'test12.txt' USING PigStorage('\t') AS (CUSTOMER_ID:int,READING_DATETIME:chararray); 
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; 
DUMP dates; 

输出

Output

+0

问题可能与分隔符,我尝试使用“\ t”和文件不加载。它在pig输出的'input'部分返回file not read错误。选项卡为您工作的原因可能是因为我将CSV作为文本进行了粘贴。你能建议我该怎么做?另外,之前当我倾销存储“'的'记录'时,它运行良好。我可以看到输出。 –

相关问题