Java 每条推文中未重复的单词总数

Java 每条推文中未重复的单词总数,java,twitter,apache-storm,trident,Java,Twitter,Apache Storm,Trident,我是java和Trident的新手,我导入了获取tweet的项目,但我想知道这个代码如何在我从tuple.getValue0;只意味着第一条推特 在hashset或hashmap中获取所有tweet以获取每条tweet中的特征词总数时,我遇到了问题 public void execute(TridentTuple tuple, TridentCollector collector) { 此方法用于在tweet上执行方程 public Values getValues(Tweet tweet,

我是java和Trident的新手,我导入了获取tweet的项目,但我想知道这个代码如何在我从tuple.getValue0;只意味着第一条推特

在hashset或hashmap中获取所有tweet以获取每条tweet中的特征词总数时,我遇到了问题

public void execute(TridentTuple tuple, TridentCollector collector) {
此方法用于在tweet上执行方程

public Values getValues(Tweet tweet, String[] words){
 }
这段代码得到了第一条tweet,然后得到了它的主体,将其转换为字符串数组,我知道我需要解决什么问题,但不能很好地编写它

我认为: 做成环状

for (int i=0;i<10;i++)
{
 Tweet tweet = (Tweet) tuple.getValue(i);   
}
对于每条推文: 对于tweet中的每个单词: 尝试将每个单词添加到一个集合中。 如果该单词已存在于集合中,请将其从集合中删除。 计算包含该tweet的单词集的大小。
问题在于获取所有tweet上不同单词的计数与作为流处理器的Strom之间的不匹配。您想要回答的查询只能在一组有限的tweet上计算。然而,在流处理中,您处理一个潜在的无限输入数据流

如果您有一组有限的tweet,您可能希望使用批处理框架,如Flink、Spark或MapReduce。如果你确实有无限多的推特,你必须重新措辞你的问题

正如你已经提到的,你实际上想要在所有tweet上循环。正如您所说的流处理,没有这样的概念。您有无限多的输入元组,Storm应用于每个输入元组,您可以将其视为Storm自动在输入上循环,即使循环不是正确的术语。由于您的计算覆盖了所有Tweet,因此您需要在Bolt代码中维护一个状态,以便您可以为每个Tweet更新该状态。Storm中状态的simples形式将是Bolt类中的成员变量

公共类MyBolt工具???{ //这是您的状态变量 私有最终集allWords=新哈希集; public void executeTridentTuple元组,TridentCollector收集器{ Tweet-Tweet=Tweettuple.getValue0; 字符串tweetBody=tweet.getBody; 字符串字[]=tweetBody.toLowerCase.splitregex; 弗斯特林w:文字{ //由于allWords是一个集合,因此不能将同一个单词添加两次 //对同一单词的第二个add调用将被忽略 //因此,所有单词只包含每个单词一次 this.allWords.addw; } } } 现在,这段代码没有发出任何东西,因为不清楚您实际想要发出什么?在流处理中,没有结束,您不能说发出包含在allWords中的单词的最终计数。你所能做的是,在每次更新后都要发出当前计数。。。为此,添加collector.emitnew值this.allWords.size;在执行结束时


此外,我想补充一点,如果MyBolt没有应用并行性,那么所提供的解决方案只能正确工作——否则,实例上的不同集合可能包含相同的单词。要解决这个问题,需要将每条Tweet标记为无状态Bolt中的单词,并将这些单词流放入采用的MyBolt中,MyBolt使用内部集合作为状态。MyBolt的输入数据还必须通过FieldsGroup接收数据,以确保每个实例上有不同的单词集。

您知道单词集的基本属性吗?提示:集合不允许重复。谢谢你的回复,不,我不知道,但是对不起,你知道三叉戟吗,我想我需要这样写str=br。readLine会给我这行的。str.split将给我字符串数组,然后遍历数组的每个元素并将其存储在hashset中,但问题是在tweets中循环!这是否意味着您希望在多条推文中获得一个独特单词的列表?很抱歉,您的问题不清楚。我需要获取每条推文中的唯一单词总数,用示例编辑的帖子仍然不清楚。你的示例代码根本没有显示你在任何地方收集了一条推文的字数。感谢你的回复,我理解得很好,但我的问题是如何在推文中循环以获取每条推文,因为我尝试了int i=0;iUse tuple.getValues,返回对象列表。迭代该列表,而不是试图分别检索每条tweet。谢谢,你的意思是像int i=0;iList tweetList=tuple.getvalues;谢谢,但不是tweet类型的tuple return对象,我不能像上面的方法tweet-tweet=tweet-tuple.getvalue0那样写得很好感谢您的回答,我有50000条tweets only not infinite,我使用debug知道代码如何获得tweets,我在用getvalues方法实现后通过方法execute获得tweets,然后在传输到下一条tweet后发出,依此类推。。还有另一种计算方法,我现在就把它贴在帖子里,如果你想批量公关,为什么要用Storm
处理?我强烈建议使用批量系统,如Flink、Spark、MapReduce。。。但是我不能理解你的其余评论。这个项目使用的是trident而不是storm,我发布了他计算集合中出现的术语数量的方法,我需要的只是修改这个等式,所以我认为我不需要在代码中做更多更改,是我错了还是我错了?Trident只是Storm之上的API抽象,Storm是底层执行引擎;因此,它仍然是流处理,似乎不适合您的批处理用例。-我不能在这里提供任何其他帮助。