2016-03-15 51 views
1

我已經定義,計算一定的閾值的單個螺栓。該螺栓正在接收一個字段的幾個值的數據。是否有可能保留特定字段值的變量的值/狀態。保留一個變量的值/狀態的噴口的特定ID。在風暴

假設我有兩個組元組輸入US $元組$輸入的:

s$id = "21343254545454354343"   s$id="45645465645456561234" 
s$tuple$input = ["ABC",2]    s$tuple$input= ["CDE",5] 

是否有可能保留像計數器= 5「ABC」的變量爲「CDE的值和計數器= 9 「並且只有在接收到對應的id的元組時才更新它們。

回答

2

我沒玩過風暴和R,但希望這些想法將是類似於Java。

您有儲存狀態幾個選項:

  • 在工人內存(每個螺栓)
  • 外部存儲(不在風暴)

你選擇什麼取決於你的要求,但讓我們假設你只是在計算單詞,並不在意工作人員是否死亡。爲此,實現很簡單。只需在你的螺栓中創建一個私有變量並保持跟蹤。

例如,假設你有一個計數變量:

Map<String, Integer> counts = new HashMap<String, Integer>(); 

然後,在你博爾特的執行方法,你只檢查,如果你之前已經得到了這個詞,如果是增加計數:

Integer count = counts.get(word); 
if (count == null) 
    count = 0; 
count++; 
counts.put(word, count); 

來源:WordCountBolt.java

您還需要考慮如何元組流向工人。你可能不想再使用隨機分組了。相反,你想通過ID做場組合,這樣用相同的ID元組去到相同的螺栓。

展望未來,你可能想要的東西更持久(所以如果你失去了一個工人,那麼你不會失去所有的計數),所以你可能會存儲您計數像HBase的。

+0

感謝您的見解。我們正在考慮使用與R中使用地圖或列表相同的技術,但沒有考慮到工人死亡的情況。將確保這一點也覆蓋。 – TUSHAr