Stream 利用storm进行增量处理和富集

Stream 利用storm进行增量处理和富集,stream,apache-storm,real-time-data,Stream,Apache Storm,Real Time Data,我们有一个专门为处理社交媒体内容而设计的系统。在我们的storm拓扑中,我们需要处理一些螺栓,例如情感分析、语言检测、垃圾邮件检测等等。在storm上准备的所有教程和示例中,我们已经看到一个bolt可以发出在declareOutputFields()方法中声明的元组字段。是否有任何选项可以使用输入元组发出当前螺栓的字段 例如,我有一个输入元组,其中包含以下字段: 我想将输出元组定义为: 请注意,我希望我的螺栓不需要知道任何关于螺栓输出元组模式的信息 谢谢。您可以通过编写一个函数,在给定一些输

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

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

我想将输出元组定义为:

请注意,我希望我的螺栓不需要知道任何关于螺栓输出元组模式的信息


谢谢。

您可以通过编写一个函数,在给定一些输入的情况下返回一个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"]))))

抱歉耽搁了。对我来说,最好的解决方案是定义包含所有字段的新数据类型,并通过拓扑传递它