gpt4 book ai didi

java - 如何在Spring Batch中读取多个CSV文件来合并数据进行处理?

转载 作者:行者123 更新时间:2023-12-02 00:33:15 25 4
gpt4 key购买 nike

我是 Spring Batch 的新手,正在尝试获取以下要求的一些指导。

总体要求:

我必须从不同的系统获取数据,应用一些业务逻辑,将结果保存在数据库中。

下面是一个示例。

我需要从 3 个 CSV 文件中读取数据。第一个文件 – person.csv – 包含姓名和 ID第二个文件 – address.csv – 包含每个人的地址信息。一个人可以有零个或多个地址。
第三个文件——employment.csv——包含每个人的就业信息。一个人可以有零个或多个雇主。

这是一些示例。

Person.csv###(总大小800万)

“人ID”,“人名”

1,乔伊

2、钱德勒

3、罗斯

4,莫妮卡

地址.csv

“personID”,“addressType”,“州”

1,纽约州住宅

1、邮寄、NC

2,居住地,纽约

4,居住地,纽约

4、邮寄、DC

就业.csv

“人员ID”,“雇主名称”

1,emp1

2、emp2

2、emp3

3、emp4

注意:每个文件均按人员 ID 排序。

为了应用业务逻辑,我需要合并每个人的数据,即我需要合并一个人的人员、地址、就业数据以应用逻辑。您能为此建议任何方法吗?

最佳答案

听起来像 4 step , 工作。您必须决定步骤 1 到 3 的中间结果应存放在何处。

如果所有 CSV 文件中的数据都适合内存,那么步骤 1 到 3 的中间结果可能只是一个以 personID 作为键的 Map 。如果不是,那么步骤 1 到 3 的中间结果可能应该写入数据库中的临时表。

假设所有数据都适合内存,创建一个可以注入(inject)到步骤 1 到 3 的 ItemWriter 中的 bean,例如:

// in a config class...
// assuming PersonID is of type Long
// Assuming Person class has appropriate attributes
Map<Long, Person> people = new HashMap<>();

第 1 步:

  • ItemReader - 读取下一个 Person.CSV 行并创建一个 Person实例
  • ItemProcessor - 无所事事 - 将 Person 实例传递给ItemWriter
  • ItemWriter - 将 Person 实例添加到 people map (或中间表)。

第 2 步:

  • ItemReader - 读取下一个 Address.CSV 行并创建一个 Address 实例
  • ItemProcessor - 无所事事 - 将 Address 实例传递给 ItemWriter
  • ItemWriter - 将地址添加到 people 映射(或中间表)中的相关人员。 TODO:如果某个人的地址不存在该怎么办?

第 3 步:

  • ItemReader - 读取下一个Employment.CSV 行并创建一个Employment 实例
  • ItemProcessor - 无所事事 - 将就业实例传递给 ItemWriter
  • ItemWriter - 将就业添加到 people map (或中间表)中的相关人员。 TODO:如果某个人的工作岗位不存在,会发生什么情况?

由于 ItemProcessor 在步骤 1 到 3 中无需执行任何操作,因此最好使用 Tasklet。

此外,步骤 1 到 3 可以并行完成。它可能会提高性能,但会增加确保人员正确填充的复杂性。

第 4 步:

  • ItemReader - 读取 people 的下一个元素(或中间表中的复合对象)
  • ItemProcessor - 应用业务逻辑
  • ItemWriter - 将结果写入数据库

关于java - 如何在Spring Batch中读取多个CSV文件来合并数据进行处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57996733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com