一個想法值得考慮....
參考:http://pig.apache.org/docs/r0.12.0/func.html所使用的字符串和日期函數。
輸入:
1/2/12|13:3.8
04:4.1|12:1.4
15:4.3|1/3/13
豬腳本:
A = LOAD 'input.csv' USING PigStorage('|') AS (start_time:chararray,end_time:chararray);
B = FOREACH A GENERATE (INDEXOF(end_time,'/',0) > 0 AND LAST_INDEX_OF(end_time,'/') > 0 AND (INDEXOF(end_time,'/',0) != LAST_INDEX_OF(end_time,'/'))
? (ToUnixTime(ToDate(end_time,'MM/dd/yy'))) : (ToUnixTime(ToDate(end_time,'mm:ss.S')))) -
(INDEXOF(start_time,'/',0) >0 AND LAST_INDEX_OF(start_time,'/') > 0 AND (INDEXOF(start_time,'/',0) != LAST_INDEX_OF(start_time,'/'))
? (ToUnixTime(ToDate(start_time,'MM/dd/yy'))) : (ToUnixTime(ToDate(start_time,'mm:ss.S')))) AS diff_time;
C = FOREACH (GROUP B ALL) GENERATE AVG(B.diff_time);
DUMP C;
注:代替ToUnixTime,我們可以使用ToMilliSeconds()方法。
輸出:
(1.0569718666666666E7)
爲什麼不寫一些UDF這樣做呢?這很容易在JAVA – Mzf
中做到這一點我只是想知道如果我可以使用標準的Pig庫或方法來做到這一點,而不是現在編寫我自己的實現。 – madbitloman
@madbitloman:通過使用Pig的字符串和日期函數添加了一個答案,嘗試併爲此處理您的用例。 –