我正在使用MultiResourceItemReader
通过FlatFileItemReader
委托从源中读取* csv文件。
我的目的是尽可能读取所有数据,并基于所有数据训练模型。我不能限制块的大小和按分类训练模型。我只能限制读取数据的总数。
我该怎么做?
FlatFileItemReader
具有方法.setMaxItemCount(int count)
,该方法设置要读取的最大项目。但这适用于当前的阅读资源。当multy raeder开始读取新资源时,它会通过引起delegate.close();
中的AbstractItemCountingItemStreamItemReader
来关闭旧资源:
@Override
public void close() throws ItemStreamException {
super.close();
currentItemCount = 0;
try {
doClose();
}
catch (Exception e) {
throw new ItemStreamException("Error while closing item reader", e);
}
}
然后将currentItemCount
设为零。所以它不适合我。
另一个想法是设置chunkSize。但是当达到块大小时如何停止读取?
当然,我可以通过适当的检查来扩展MultiResourceItemReader
,设置maximumItemCount
并覆盖read()
函数。
但是我不敢相信MultiResourceItemReader没有机会限制要读取的项目。
请给我建议最好的方法。
谢谢!
答案 0 :(得分:0)
要读取的最大项目数是委托的属性(每个资源),这就是为什么不能在MultiResourceItemReader
本身上进行设置的原因。但我明白您的意思,您正在寻找一个针对所有资源的全局计数器。
为了实现这一点,我还建议使用全局计数器扩展MultiResourceItemReader
,然后适当地重写read
方法。