1

我们有一个专为处理社交媒体内容而设计的系统。在我们的风暴拓扑中,我们需要处理一些螺栓,例如情感分析、语言检测、垃圾邮件检测等。在storm上准备的所有教程和示例,我们已经看到一个bolt可以发出在declareOutputFields()方法中声明的元组字段。是否有任何选项可以使用输入元组发出当前螺栓的字段?

例如,我有一个输入元组,其中包含以下字段:

<

文字:bla bla

用户名:保罗

日期:01.01.2013

来源:推特

>

我想将输出元组定义为:

<

文字:bla bla

用户名:保罗

日期:01.01.2013

来源:推特

语言:tr

>

请注意,我希望我的螺栓在螺栓的输出元组模式之前不需要了解任何信息。

谢谢你。

4

1 回答 1

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"]))))
于 2013-05-04T13:42:54.773 回答