簡體   English   中英

Hbase中的超前和滯后

[英]Lead and lag in Hbase

我正在嘗試找出如何在Hbase中執行與Oracle的LEAD和LAG等效的方法或其他可以解決我的問題的模式。 我可以編寫一個很容易做到這一點的MapReduce程序,但是我很想能夠利用這樣的事實,即數據已經按照我需要的方式進行了排序。

我的問題如下:我有一個行鍵和一個值,看起來像:

(employee name + timestamp) => data:salary

因此,一些示例數據可能是:

miller, bob;2010-01-14 => data:salary=90000
miller, bob;2010-11-04 => data:salary=102000
miller, bob;2011-12-03 => data:salary=107000
monty, fred;2010-04-10 => data:salary=19000
monty, fred;2011-09-09 => data:salary=24000

我要做的是逐條記錄計算工資的變化。 我想將上述數據轉換為記錄之間的差異:

miller, bob;2010-01-14 => data:salarydiff=90000
miller, bob;2010-11-04 => data:salarydiff=12000
miller, bob;2011-12-03 => data:salarydiff=5000
monty, fred;2010-04-10 => data:salarydiff=19000
monty, fred;2011-09-09 => data:salarydiff=5000

如果需要,我打算更改行鍵策略。

我要做的是更改密鑰,以使時間戳記遞減(新工資先發)

miller, bob;2011-12-03 => data:salary=107000
miller, bob;2010-11-04 => data:salary=102000
miller, bob;2010-01-14 => data:salary=90000

現在,您可以做一個簡單的地圖工作,它將掃描表格。 然后在地圖中創建一個新的“掃描到當前鍵”。 Scan.next獲取以前的薪水,計算差異並將其存儲在當前行鍵的新列中
基本上在您的mapper類(繼承TableMapper的類)中,您將覆蓋setup方法並獲取配置

@Override
protected void setup(Mapper.Context context) throws IOException,InterruptedException {
    Configuration config = context.getConfiguration();
    table = new HTable(config,<Table Name>);
}

然后在地圖內部,從行參數中提取行鍵,創建新的“掃描”並按照上述說明繼續

在大多數情況下,下一條記錄將在同一地區-有時可能會轉到其他地區服務器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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