基本上在我的FlowDef中,我想在我的元组上加入一些其他元组,我将通过API阅读。所以我创建了另一个空管道,并使用函数从API填充元组。然后我做一个CoGroup并将其用作尾管。
Tap tap1 = new Hfs();
Pipe pipe1 = new Pipe("pipe1");
Pipe pipeFromApi = new Pipe("pipeFromApi");
Pipe joinPipe = new CoGroup(pipe1, pipeFromApi);
Tap tap2 = new Hfs();
flowDef.addSource(pipe1, tap1).addTailSink(joinPipe, tap2);
这会导致以下错误 - “在接收器或源映射中找不到管道名称:'pipeFromApi'”。
关于如何实现这一目标的任何想法?
答案 0 :(得分:0)
您可以创建一个虚拟SinkTap并将其设为" source" of pipeFromApi。
管道" pipeFromApi"没有水龙头 - 而每根烟斗都应该有一个。
答案 1 :(得分:0)
Cascading中的Pipe用于命名管道组件的分支,在计划将Taps绑定为源或接收器时使用这些分支。 Tap是Pipe程序集的数据源或数据接收器。从这些定义中可以清楚地看出,为了携带由Tap提供的数据,您需要将其与Pipe绑定。在您的代码中,您已经定义了Pipe pipeFromApi,但没有为此创建任何源(Tap)。此外,在创建此Tap之后,需要将Pipe pipeFromApi与此新创建的Tap in flowDef绑定。然后只有流程才能识别出两个输入源,一个是pipe1,另一个是pipeFromApi。 因此,正确的代码段可能如下所示:
Tap tap1 = new Hfs("..inputSource");
Pipe pipe1 = new Pipe("pipe1");
Tap tap2 = new Hfs("..inputSourceFromApi");
Pipe pipeFromApi = new Pipe("pipeFromApi");
Tap tap3 = new Hfs("..outputSinkDestination");
Pipe joinPipe = new CoGroup(pipe1, pipeFromApi);
flowDef.addSource(pipe1, tap1).addSource(pipeFromApi, tap2).addTailSink(joinPipe, tap3);