如何使用 Spring Batch 进行聚合?

jan*_*ith 3 spring-batch

我想弄清楚如何使用 Spring Batch 进行聚合。例如,我有一个包含名称列表的 CSV 文件:

name
John
Amy
John
Ryan
Run Code Online (Sandbox Code Playgroud)

我想要文本文件中的名称计数:

name, count
Amy, 1
John, 2
Ryan, 1
Run Code Online (Sandbox Code Playgroud)

从我从 Spring Batch 学到的,ETL 批处理(itemReader -> ItemProcessor -> ItemWriter)更像是 map-reduce 术语中的映射阶段。如何在 Spring Batch 中执行缩减(聚合)阶段?

Spring Batch 是正确的工具吗?或者我应该为此使用 Spark?谢谢。

Mah*_*ine 5

ItemProcessor典型地用于过滤器,验证或地图数据从一种类型到另一种,但也可以用于任何类型的等你的情况计数处理的。对于您的示例,项目处理器可以在name -> count名称通过管道时保存名称的映射和计数。

面向块的处理模型不直接映射到 map-reduce 模型。但是,分区正是您要寻找的。该StepExecutionSplitterStepExecutionAggregator是做这样的操作地图,减少本地或远程的关键概念。参考文档的分区部分中关于此的更多详细信息。

有一个与此类似的问题,我在这里添加以供参考:如何在 Spring Batch 作业中聚合完整数据集?

希望这可以帮助。