2016-03-15 53 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