[英]Apache Pig from timestamp to date
我正在嘗試使用Amabari中的Apache Pig分析一些數據
在這種情況下,我遇到了問題...我有一列以這種特定格式寫的時間戳記
1433306146000
1422814565122
使用在線轉換器,如果我輸入1433306146000,則輸出為08/30/47389 @ 12:06 pm(UTC),但事實並非如此,實際上,如果我手動刪除最后3個數字(1433306146),則結果為06/03 / 2015 @ 4:35 am(UTC)。
那么,這是在Pig中刪除timestamp列中最后3個數字的方法嗎? 而且主要的問題是:具有功能
GetDay(日期時間)
如果我通過時間戳記,它將起作用嗎? 還是從時間戳中生成准星期幾呢?
謝謝
不確定您使用了哪個轉換器作為時間戳,但此處顯示正確的格式。 ToDate運算符不對復雜數據類型(例如bag)起作用。 這就是為什么嘗試在組上使用它時會出錯的原因。 而且有時chararrays的行為是不可預測的,因此經驗法則是對時間戳使用長基本類型。 下面的代碼應該工作。
input=LOAD '..Fra/data/prova/*' AS(old_timestamp:long,timestamp:long);
result=FOREACH input GENERATE
GetDay(ToDate(old_timestamp)),
GetDay(ToDate(timestamp));
DUMP result;
同樣,如果您不想更改架構,顯然也可以從chararray轉換為long。 只有這會改變:
result=FOREACH input GENERATE
GetDay(ToDate((long)old_timestamp)),
GetDay(ToDate((long)timestamp));
還請注意,ToDate總是需要毫秒,因此,如果您將它們切斷,您將期望看到Unix默認的開始時間為1970-01-01,干杯!
@inquisitive_mind我嘗試了完整的字符串(包括偏移量),但是它不起作用,錯誤是:
“無效格式1422762920000的格式不正確,為0000”
所以我試圖以這種方式使用子串
SUBSTRING grp = FOREACH y GENERATE (timestamp),SUBSTRING(timestamp,0,9);
然后我將其存儲到一個新文件中以自由操作。產生的輸出為兩個列:第一個是原始時間戳,第二個是不帶最后三個字符的新時間戳,所以我嘗試啟動這個新腳本:
y=LOAD '..Fra/data/prova/*' as (old_timestamp:chararray,timestamp:chararray);
grp=group y by timestamp;
result=foreach grp generate GetDay(ToDate(group));
dump result;
輸出為:
“ ...無效的格式1422762920格式錯誤,為0”
因此,即使我知道從先前的代碼中刪除另一個char時,我也會嘗試這樣做,因此我更改了子字符串函數的范圍(timestamp,0,10)。 現在我嘗試重新整理腳本,但是產生的輸出是(1),(1),(1),(1),(1),我很絕望!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.