【问题标题】:Convert BatchStage<List<Object>> to BatchStage<Object> in Hazelcast在 Hazelcast 中将 BatchStage<List<Object>> 转换为 BatchStage<Object>
【发布时间】:2021-07-14 06:36:47
【问题描述】:

在我的 hazelcast jet 应用程序中,我正在执行分组连接,之后我得到了结果 BatchStage 格式,但我想将其转换为 BatchStage,我尝试过 flatMap,但它覆盖了一些我不希望单独存储所有 Object 的键。

我的代码:

BatchStage<Object> bd = jdbcBatchStageData.flatMap(list -> Traversers.traverseArray(list.toArray()));

我知道 flatMap 会替换一些键,但是如何将所有对象单独存储在 BatchStage 中,这样它们就不会被覆盖任何键。

Object 等于 Map

【问题讨论】:

  • “flatMap 将替换一些键”是什么意思? flatMap 的输出将包含与所有输入列表中一样多的元素。
  • 你应该使用flatMap(list -&gt; Traversers.traverseIterable(list)),但它不影响语义,只是使用更少的内存。

标签: java hazelcast hazelcast-jet


【解决方案1】:

根据您的数据形式(您不提供),这里有一个可能需要一些调整的建议:


jdbcBatchStageData.flatMap(list -> Traversers.traverseArray(list.toArray()))
  .groupingKey(ByKey)
  .aggregate(AggregateOperations.toList())
  1. 平面将不同的列表映射到单个项目中
  2. 按键分组(需要定义ByKey函数`
  3. 聚合结果,这样你就有了一批Map.Entry&lt;K, List&gt;

【讨论】:

  • 但我不想对其进行分组我已经对其进行了分组并在 Batch> 中得到了结果,现在我只想将其转换为 Batch
  • 您最初的问题是如何“取消重复”您的项目。如果您“只是”想要转换,那么您只需按照初始代码遍历
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-01
  • 1970-01-01
  • 2018-11-23
  • 1970-01-01
  • 1970-01-01
  • 2017-04-07
相关资源
最近更新 更多