风暴流增量处理与富集

ffdz8vbo  于 2021-06-24  发布在  Storm
关注(0)|答案(1)|浏览(276)

我们有一个专门用来处理社交媒体内容的系统。在我们的storm拓扑中,我们需要处理一些螺栓,例如情感分析、语言检测、垃圾邮件检测等等。在storm上准备的所有教程和示例中,我们已经看到一个bolt可以发出在declareoutputfields()方法中声明的元组字段。有没有任何选项可以用输入元组发出当前bolt的字段?
例如,我有一个包含以下字段的输入元组:
<
文本:bla bla
用户名:paul
日期:2013年1月1日
source:twitter

我想将输出元组定义为:
<
文本:bla bla
用户名:paul
日期:2013年1月1日
source:twitter
lang:tr

注意,我希望我的bolt在bolt的输出元组模式之前不需要知道任何事情。
谢谢您。

2o7dmzc5

2o7dmzc51#

您可以通过编写一个函数来实现这样的功能,该函数在给定输入的情况下返回一个bolt,而不是直接编写bolt。您可以通过编写一个函数来参数化bolt的创建,该函数将返回一个bolt对象和您想要的输出字段。
显然,这必须在部署拓扑时完成,因此它不能在运行时在流上是动态的,但可以在启动时是动态的。像这样的

(defn make-bolt [bolt-name input-fields]
  (defbolt bolt-name input-fields
    ...))

....

(topology
 {} ;; spouts
 {"a-bolt" (bolt-spec {"a-spout":shuffle}
                      (make-bolt bolt-name ["input" "tuple" "lang"]))))

相关问题