Hazelcast Jet-将列表排入流

时间:2019-11-12 16:46:46

标签: hazelcast-jet

我的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发出每个项目?我在文档中找不到很多东西。

1 个答案:

答案 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"));