我的Jet作业正在转换Redis流数据-转换是-我为流中的每个项目查找一个map
-如果发现其中包含一个或多个项目(列表)。我想将流失流中的项目写为单独的项目,而不是列表的一个元素。
我的代码有效,但是它将列表作为单个项目写入另一个Redis流-我需要的是将列表中的每个元素分别写入流(以便其他作业可以独立处理项目)。
代码
pipeline.drawFrom(RedisSources.stream("source", uri, "payloads", "$"))
.withIngestionTimestamps()
.groupingKey(k -> k.get("eventType"))
.mapUsingContext(lookupService(), (svc, event, item) -> svc.findHooks(event) /*returns list*/)
.drainTo(RedisSinks.stream("drain", uri, "hooks"));
因此,应将服务返回的列表写为输出流中的单独元素。
我可以使用哪种api发出每个项目?我在文档中找不到很多东西。
答案 0 :(得分:2)
要将一个项目映射到多个项目,您需要使用flat map转换,而不是简单的map转换。
以下示例:
pipeline.drawFrom(RedisSources.stream("source", uri, "payloads", "$"))
.withIngestionTimestamps()
.groupingKey(k -> k.get("eventType"))
.flatMapUsingContext(lookupService(), (svc, event, item) -> Traversers.traverseIterable(svc.findHooks(event)) /*returns list*/)
.drainTo(RedisSinks.stream("drain", uri, "hooks"));