2016-02-11 54 views
0

假設一個數據集包含2場:場,質詢時間如何在豬身上執行這個逗號分隔列表?

  fields         question time 

php,error,gd,image-processing        1235000501 
php,error,gd,image-processing        1235000551 
lisp,scheme,subjective,clojure        1235000177 
lisp,scheme,subjective,clojure        1235001545 
lisp,scheme,subjective,clojure        1235002457 
lisp,scheme,subjective,clojure        1235002809 
lisp,scheme,subjective,clojure        1235003266 
lisp,scheme,subjective,clojure        1235007817 
lisp,scheme,subjective,clojure        1235007913 
lisp,scheme,subjective,clojure        1235020626 
lisp,scheme,subjective,clojure        1235040652 

我嘗試下面的代碼

DEFINE UnixToISO org.apache.pig.piggybank.evaluation.datetime.convert.UnixToISO(); 
A= LOAD '/user/home/book3.csv' using PigStorage() as (fields:chararray,question time:long); 
B= foreach A generate fields,UnixToISO(question time * 1000) as temp; 
DUMP B; 

沒有變化與輸入相同

C= foreach B generate fields, ToDate(temp) as date_time; 
DUMP C; 

沒有變化與輸入相同

D= foreach C generate fields, GetHour(date_time) as hour; 
DUMP D; 

沒有改變相同的input.What是我的代碼錯誤?

回答

0

我認爲樣本數據格式不正確。請檢查分隔兩欄中數據的分隔符。我拿起樣本數據並刪除列數據之間的空格,並用一個標籤替換它們。以這種方式,我能夠加載兩列數據並提取時間戳並得到小時。 請參閱下面的腳本和輸出。

腳本

A = LOAD 'test4.txt' using PigStorage('\t') AS (fields:chararray,question_time:long); 
B = foreach A generate fields,ToDate(question_time * 1000) as temp; 
C = foreach B generate fields, GetHour(temp) as hour; 
DUMP C; 

TimeStamp to Date

Date to Hour

+0

感謝您的幫助..我有疑問時,我裝如上面我的問題提到的csv文件,我的代碼因此未工作。但是,當我保存爲文本(製表符分隔)並加載到HDFS,您的代碼工程..因此,我得到答案。爲什麼它是這樣的?你可以解釋分隔符的用法,因爲雖然我的代碼流是可以的,但是在加載部分時出錯。任何想法或預防措施,以避免這種情況..預先感謝。 – priyanka

+0

我用tab作爲分隔符,因爲我用tabS替換了所有的空格。所以在使用PigStorage的load語句中,我使用了tab。即PigStorage('\ t'),如果文件是空格,那麼你會使用PigStorage('')。如果它是逗號,那麼PigStorage(',')。 –