我有一个大型CSV文件,我希望以速率限制进行处理。 Splitter Pattern提供了我正在寻找的内容,但我无法弄清楚如何将其与CSV Component结合起来。
从拆分器文档中,您可以处理CSV,如:
from("file:inbox")
.unmarshal().csv().split()
.streaming().parallelProcessing()
.throttle(requestsPerSecond)
.bean(new ValidateProcess(), "validate")
.marshal().csv().to("file:outbox");
但理想情况下,我想利用Apache Camel CSV组件处理mash做更多的事情:
{{1}}
我知道上面的代码是完全错误的,但希望它传达了我想要实现的目标。这完全可行吗?
答案 0 :(得分:0)
因此,出于某种原因,我无法在早些时候解决这个问题,我认为我的类路径问题没有取消对org.apache.camel:camel-csv
的依赖。一旦我整理出来,一切都很好。
这是我最终的结果:
final CsvDataFormat csv = new CsvDataFormat(";");
csv.setLazyLoad(true);
csv.setSkipFirstLine(true);
from(in).unmarshal(csv).split(body()).streaming().parallelProcessing()
.bean(validator, "validateNumber")
.filter(header(ValidateProcess.Valid).isEqualTo(true))
.throttle(tps).bean(validator, "validate")
.marshal().csv()
.to(out).log("done.").end();
基本上,我想要对包含CSV
的{{1}}数据进行流处理,速率限制在50 TPS,并将结果输出到csv文件。