【发布时间】:2014-03-12 11:29:48
【问题描述】:
我是storm框架的新手(https://storm.incubator.apache.org/about/integrates.html), 我用我的代码在本地测试,我认为如果我删除停用词,它会表现良好,但我在线搜索,我看不到任何在风暴中删除停用词的示例。
【问题讨论】:
标签: data-mining apache-storm stop-words topic-modeling
我是storm框架的新手(https://storm.incubator.apache.org/about/integrates.html), 我用我的代码在本地测试,我认为如果我删除停用词,它会表现良好,但我在线搜索,我看不到任何在风暴中删除停用词的示例。
【问题讨论】:
标签: data-mining apache-storm stop-words topic-modeling
如果停用词列表的大小足够小以适合内存,最直接的方法是使用知道该列表的风暴Filter 的实现来简单地过滤元组。这个Filter 可能会每隔一段时间轮询数据库以获取最新的停用词列表,如果此列表随着时间的推移而演变。
如果停用词列表的大小更大,那么您可以使用QueryFunction,它通过stateQuery 函数从您的拓扑中调用,它会:
+ 在此之后添加一个Filter 以根据该布尔值进行过滤。
如果你喜欢冒险:
另一种更快的方法是使用bloom filter approximation。我听说Algebird 旨在提供这种功能,并针对 Scalding 和 Storm(这有多酷?),但我不知道它有多稳定,我也没有任何实际将其插入 Storm 的经验(如果下雨,可能是星期天......)。
此外,Cascading(与 Storm 没有直接关系,但在 map reduce 之上有一组非常相似的原始抽象)在this tutorial 中建议了一种基于左连接的方法。这样的连接存在于 Storm 中,并且正确的分支可能会被提供一个 FixedBatchSpout 每次发出所有停用词,或者甚至是一个自定义的 spout,它每次都从持久性中读取最新版本的停用词列表,所以也许这会也工作?也许?这也假设停用词列表的大小相对较小。
【讨论】: