簡體   English   中英

從時間戳至今的Apache Pig

[英]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,干杯!

您所擁有的是從1970-01-01T00:00:00.000Z的偏移量(以毫秒為單位)。您可以將毫秒數傳遞給ToDate。它將Unix時間戳記作為輸入並返回datetime對象。 獲取日期時間對象后,就可以使用GetDay函數了,無需刪除最后3個數字

GetDay(ToDate(1433306146000))

注意:如果您確實要刪除3個數字,則將數據加載為chararray並使用SUBSTRING函數。

@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM