我在LocalDRPC中运行了一个简单的Trident拓扑,其中一个函数输出result
字段,但是当我运行它时,我得到的结果似乎是来自每个元组的所有信息而不仅仅是我在DRPC docs给出的result
字段。例如:
[["http:\/\/www.smbc-comics.com\/rss.php",http://www.smbc-comics.com/rss.php,[#document: null],[item: null],[link: null],[description: null],http://feedproxy.google.com/~r/smbc-comics/PvLb/~3/CBpJmAiJSxs/index.php,http://www.smbc-comics.com/comics/20141001.png,"http:\/\/www.smbc-comics.com\/comics\/20141001.png"], ...]
可以从每个元组中获取所有信息,但是没有迹象表明哪个字段被称为结果。事实上,它甚至不是有效的JSON!
那么如何提取与我在拓扑中指定的特定字段相对应的值?
答案 0 :(得分:1)
Storm返回Json数组中执行链中处理的每个字段。值的顺序与处理它们的顺序相同,因此如果您只对最后一个函数的结果感兴趣,那么您应该只读取数组中的最后一个值。如果由于任何原因您对中间结果不感兴趣,那么您可以使用投影方法对其进行限制。例如,如果您有一个流:
stream.each(new Fields("args"), new AddExclamation(), new Fields(EX_1))
.each(new Fields(EX_1), new AddPlus(), new Fields(P1, P2));
返回
[["hello","hello!1","hello!1+1","hello!1+2"],["hello","hello!2","hello!2+1","hello!2+2"]]
然后通过设置投影,您可以限制为P2
stream.each(new Fields("args"), new AddExclamation(), new Fields(EX_1))
.each(new Fields(EX_1), new AddPlus(), new Fields(P1, P2))
.project(new Fields(P2));
所以输出只有这个
[["hello!1+2"],["hello!2+2"]]
你可以在这里看到这个: