Apache Pig日期时间 - 格式错误无效

时间:2016-09-15 13:07:50

标签: casting apache-pig jodatime

我有一个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

以上命令正在执行。当我使用DESCRIBE用于' date'时, 它返回:

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类中使用的日期时间。 我已经尝试了几种相同数据的组合。在线尝试brwosing。仍然没有解决问题。对我来说似乎是一件非常愚蠢的事情,但是cudn并没有解决它。

1 个答案:

答案 0 :(得分:0)

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

  1. 将输入文件转换为逗号分隔的输入文件 或
  2. 使用正确的分隔符加载数据。
  3. 我使用tab作为分隔符并且工作正常。参见下面的

    数据

    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