Java Spring批处理:为未知数量的分区编写分区程序
我在学习春季批。我目前正在处理的生物数据如下所示:Java Spring批处理:为未知数量的分区编写分区程序,java,spring,spring-batch,bioinformatics,partitioning,Java,Spring,Spring Batch,Bioinformatics,Partitioning,我在学习春季批。我目前正在处理的生物数据如下所示: interface Variant { public String getChromosome(); public int getPosition(); public Set<String> getGenes(); } 接口变量{ 公共字符串getchromose(); public int getPosition(); 公共集getGenes(); } (变体是基因组上可能与某些基因重叠的位置) 我已经写了一些 现
interface Variant {
public String getChromosome();
public int getPosition();
public Set<String> getGenes();
}
接口变量{
公共字符串getchromose();
public int getPosition();
公共集getGenes();
}
(变体是基因组上可能与某些基因重叠的位置)
我已经写了一些
现在我想对每个基因进行分析。因此,我想为每个基因(gene1、gene2、geneN)划分我的工作流程,以便对与一个基因相关的所有变体进行统计
实现这个类的最佳方法是什么(它是正确的类吗?)?我看到的所有示例都使用一些“索引”或有限数量的gridSize
?此外,返回的映射是否必须包含小于gridSize的项,或者我是否可以返回一个“大”映射,并且spring batch只能并行运行gridSize
作业?最后如何连接数据
谢谢
EDIT:或者我应该看看MultiResourceItemWriter吗?当使用Spring Batch的分区功能时,主要涉及两个类,
Partitioner
和PartitionHandler
分区器
Partitioner
接口负责将要处理的数据划分为多个分区。它有一个方法Partitioner#partition(int gridSize)
,负责分析要分区的数据并返回一个Map
,每个分区有一个条目。gridSize
参数实际上只是整个计算的一部分输入,可以使用或忽略。例如,如果gridSize
为5,我可以选择只返回5个分区,我可以选择过度分区并返回5的倍数,或者我可以分析数据并意识到我只需要3个分区,而完全忽略gridSize
值
PartionHandler
PartitionHandler
负责将Partitioner
返回的分区委托给worker。在Spring生态系统中,提供了三个PartitionHandler
实现,一个TaskExecutionPartitionHandler
将工作委托给当前JVM内部的线程,一个MessageChannelPartitionHandler
将工作委托给监听某种形式消息中间件的远程工作人员,以及Spring云任务项目中的一个DeployerPartitionHandler
,它动态地启动新的worker以执行提供的分区
根据以上所述,回答您的具体问题:
映射中返回您认为合适的任意多个项。如上所述,gridSize
实际上是一个指南
使用SpringBatch的分区功能时,主要涉及两个类:
Partitioner
和PartitionHandler
分区器
Partitioner
接口负责将要处理的数据划分为多个分区。它有一个方法Partitioner#partition(int gridSize)
,负责分析要分区的数据并返回一个Map
,每个分区有一个条目。gridSize
参数实际上只是整个计算的一部分输入,可以使用或忽略。例如,如果gridSize
为5,我可以选择只返回5个分区,我可以选择过度分区并返回5的倍数,或者我可以分析数据并意识到我只需要3个分区,而完全忽略gridSize
值
PartionHandler
PartitionHandler
负责将Partitioner
返回的分区委托给worker。在Spring生态系统中,提供了三个PartitionHandler
实现,一个TaskExecutionPartitionHandler
将工作委托给当前JVM内部的线程,一个MessageChannelPartitionHandler
将工作委托给监听某种形式消息中间件的远程工作人员,以及Spring云任务项目中的一个DeployerPartitionHandler
,它动态地启动新的worker以执行提供的分区
根据以上所述,回答您的具体问题: