2016-09-15 55 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作爲文本進行了粘貼。你能建議我該怎麼做?另外,之前當我傾銷存儲「'的'記錄'時,它運行良好。我可以看到輸出。 –

相關問題