Sat*_*ish 12 java mapreduce batch-processing spring-batch
是否可以在SpringBatch中执行MapReduce样式操作?
我的批处理工作有两个步骤.第一步计算平均值.第二步将每个值与平均值进行比较以确定另一个值.
例如,让我们说我有一个庞大的学生分数数据库.第一步计算每门课程/考试的平均分数.第二步将个人得分与平均值进行比较,根据一些简单的规则确定等级:
目前我的第一步是一个Sql,它选择平均值并将其写入表中.第二步是一个Sql,它将平均分数与个人分数相结合,并使用Processor来实现规则.
有类似的聚合函数,如avg,min在Steps中使用了很多,我真的更喜欢这可以在Processors中完成,尽可能简化Sqls.有没有办法编写一个处理器,它根据分组标准在多行中聚合结果,然后将一次平均值/最小值写入输出表?
这种模式重复了很多,我不是在寻找使用Sql的单处理器实现,它可以获取平均和个人分数.
有可能的。您甚至不需要多于一步。Map-Reduce 可以一步实现。您可以创建一个与 ItemReader 和 ItemWriter 关联的步骤。将 ItemReader -ItemWriter 对视为 Map-Reduce。您可以通过使用具有适当行聚合的自定义读取器和写入器来实现必要的效果。对于您的读者/编写者来说,实现 Stream 接口以保证 Spring 批处理的中间 StepContext 保存操作可能是一个好主意。
我只是为了好玩而尝试,但我认为这是没有意义的,因为你的工作能力受到单个 JVM 的限制,换句话说:你无法达到 Hadoop 集群(或其他真实的 MapReduce 实现)生产环境的性能。此外,随着数据大小的增长,可扩展性将变得非常困难。
很好的观察,但在我看来,目前对于现实世界的任务来说毫无用处。
| 归档时间: |
|
| 查看次数: |
2300 次 |
| 最近记录: |