1

我試圖分析在amabariApache的豬從時間戳至今

阿帕奇豬一些數據我有一個問題,這個特定的情況下......我有寫在這個特定格式

時間戳列
1433306146000 

1422814565122 

用,如果我把在輸入1433306146000輸出08/30/47389 @下午12時06分(UTC),但事實卻並非如此,其實如果我手動刪除最後3個號碼的在線轉換器(1433306146)結果是06/03/2015 @ 4:35 am(UTC)。

那麼,在豬的時間戳列中刪除最後3個數字的方法呢? 而且也是主要的問題是:與功能

GetDay(日期時間)

如果我通過了戳它是否行得通呢?或者從時間戳開始,有一種不同的方法可以生成副週一天?

感謝

回答

2

不確定哪個轉換器用於您的時間戳,但here它顯示了適配器格式。 ToDate運算符不會處理像bag這樣的複雜數據類型。這就是爲什麼你試圖在組上使用它的原因。有時候,行爲與行規是不可預知的,因此經驗法則是使用長基元類型來表示時間戳。下面的代碼應該可以工作。

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將始終需要一個毫秒,所以如果你將其剪掉,你希望看到的1970-01-01 乾杯的Unix默認的開始時間!

+0

感謝您的回答!產生的結果是每月一天(從1到31),但如果我只希望工作日(從1到7)?例如1日...我能做什麼? – Fraangel

+0

你可以ei它使用宏將日期轉換爲數字或採取殘酷的方式並使用7條件語句 – madbitloman

+0

我該如何使用它?我是一個noob ...但我嘗試了這種方式 結果= FOREACH輸入生成 GetDay(ToDate((long)old_timestamp%7)但它不工作! – Fraangel

0

你是從1970-01-01T00偏移什麼:00:00.000Z在milliseconds.You方面可以傳遞毫秒ToDate。它採用Unix時間戳作爲輸入並返回DateTime對象。一旦你獲得了DateTime對象,你就可以使用GetDay function.No需要刪除過去的3號

GetDay(ToDate(1433306146000)) 

注意:如果你真的要刪除3個數字,然後加載數據chararray和使用SUBSTRING功能。

+0

嗨@inquisitive_mind感謝您的回答!我試圖做這樣的事情 Y = LOAD '../Fra/mydata/*' AS(USER_ID:chararray,事項標識:chararray,時間戳:chararray); grp = group y by timestamp; 結果=的foreach GRP { GetDay(TODATE(GRP); } 轉儲結果; 第一個問題是如何時間戳是由豬的認可,我應該爲chararray,二是有一個錯誤(也許不是唯一的一個?,抱歉,但我是一個小白)在分析過程中的異常......你可以幫我解決這個問題 感謝 – Fraangel

+0

@Fraangel結果=的foreach GRP產生GetDay(TODATE(組));轉儲結果; –

+0

我回答你的評論使文本太長 – Fraangel

0

@inquisitive_mind我試圖完整的字符串(包括偏移),但它不能正常工作,錯誤的是:

「無效的格式1422762920000在0000畸形」

,所以我試着使用子這樣

SUBSTRING grp = FOREACH y GENERATE (timestamp),SUBSTRING(timestamp,0,9);

,然後我將其存儲到一個新的文件操作它生產freedom.The輸出是二科拉姆:第一是原來的時間戳,第二是沒有最後三個字符新的時間戳,於是,我就推出這個新的腳本:

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"

所以,即使我知道,雖然從previus代碼刪除另一個字符我會努力讓我改變了子範圍函數(時間戳,0,10)。而現在我試圖重新啓動腳本,但輸出的是(1),(1),(1),(1),(1), 我絕望了!