gpt4 book ai didi

java - 如何限制 Trident DRPC 结果仅包含拓扑的最后一个函数的字段?

转载 作者:行者123 更新时间:2023-12-01 12:28:13 24 4
gpt4 key购买 nike

我在 LocalDRPC 中运行了一个简单的 Trident 拓扑,其中一个函数输出 结果 字段,但是当我运行它时,我返回的结果似乎是来自每个元组,而不是像我所期望的那样仅包含 result 字段,给出 DRPC docs 。例如:

[["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!

那么如何提取与我在拓扑中指定的特定字段相对应的值?

最佳答案

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"]]

您可以在此处查看此操作:

https://github.com/ExampleDriven/storm-example/blob/master/src/test/java/org/exampledriven/ExclamationPlusTridentTopologyTest.java

关于java - 如何限制 Trident DRPC 结果仅包含拓扑的最后一个函数的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26163667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com