我们有一个专为处理社交媒体内容而设计的系统。在我们的风暴拓扑中,我们有一些要处理的螺栓,例如情绪分析,语言检测,垃圾邮件检测等。所有教程和示例都是在storm上编写的,我们已经看到一个bolt可以发出在declareOutputFields()方法中声明的元组字段。有没有选项用输入元组发出当前螺栓的字段?
例如,我有一个输入元组,其中包含以下字段:
<
text:bla bla
用户名:paul
日期:01.01.2013
源:微博
>
我想将输出元组定义为:
<
text:bla bla
用户名:paul
日期:01.01.2013
源:微博
郎:TR
>
请注意,我希望我的螺栓在bolt的输出元组架构之前不需要知道任何事情。
谢谢。
答案 0 :(得分:0)
你可以通过编写一个函数来实现这样的事情,该函数返回给定一些输入的螺栓而不是直接写螺栓。通过编写一个函数来参数化螺栓的创建,该函数将返回一个带有所需输出字段的螺栓对象。
显然,这必须在部署拓扑时完成,因此在运行时它不能在流上动态,但在启动时它可以是动态的。像
这样的东西(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"]))))