我想弄清楚如何使用 Spring Batch 进行聚合。
例如,我有一个包含姓名列表的 CSV 文件:
name
John
Amy
John
Ryan
我想要文本文件中的名称计数:
name, count
Amy, 1
John, 2
Ryan, 1
根据我从 Spring Batch 了解到的情况,ETL 批处理(itemReader -> ItemProcessor -> ItemWriter)更像是 map-reduce 术语中的映射阶段。如何在 Spring Batch 中进行减少(聚合)阶段?
Spring Batch 是正确的工具吗?或者我应该使用 Spark 来实现这个目的?谢谢。
The ItemProcessor
通常用于过滤、验证数据或将数据从一种类型映射到另一种类型,但也可用于任何类型的处理,例如在您的情况下进行计数。对于您的示例,项目处理器可以保存一张地图name -> count
并在名字通过管道时对其进行计数。
面向块的处理模型并不直接映射到map-reduce模型。然而,分区正是您所寻找的。这StepExecutionSplitter
and StepExecutionAggregator
是在本地或远程执行类似映射缩减操作的关键概念。有关于此的更多详细信息,请参阅分区 https://docs.spring.io/spring-batch/4.1.x/reference/html/scalability.html#partitioning参考文档的部分。
有一个类似的问题,我在这里添加以供参考:如何在 Spring Batch 作业中聚合完整数据集? https://stackoverflow.com/questions/29486995/howto-aggregate-on-full-data-set-in-spring-batch-jobs
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)