比对两个 csv 文件
有两个同构的大 csv 文件 A 和 B,主键是 Name、Dept,两者有部分数据不同。
A.csv |
B.csv |
Name,Dept,Salary Jonathan,Administration,7 Alexis,Administration,16000 Timothy,Administration,0 Michael,Administration,0 Alexis_,Administration,0 Ashley,Finance,11000 |
Name,Dept,Salary Jonathan,Administration,7 Alexis,Administration,16 Timothy,Finance,5000 Ashley,Finance,11000 Daniel,HR,1600 Joseph_,Finance,1600 |
请用 Java 比较两个文件的主键,根据主键找到 A 有而 B 没有的记录。
Name |
Dept |
Salary |
Alexis_ |
Administration |
0 |
Michael |
Administration |
0 |
Timothy |
Administration |
0 |
编写SPL代码:
A |
||
1 |
=T@c("A.csv") |
=T@c("B.csv") |
2 |
=A1.sortx(Name,Dept) |
=B1.sortx(Name,Dept) |
3 |
=[A2,B2].merge@d(Name,Dept).fetch() |
函数T可解析csv文件,@c表示用游标读取远超内存的文件,sortx用于游标排序,merge用于归并,@d表示求差集。
上面代码也可以用SPL语句一步实现:
=[T@c(""A.csv"").sortx(Name,Dept),T@c(""B.csv"").sortx(Name,Dept)].merge@d(Name,Dept).fetch()
Java 集成 SPL 可参考 Java 如何调用 SPL 脚本
问题来源:https://stackoverflow.com/questions/75987204/efficiently-comparing-two-large-java-lists-to-find-unique-items
英文版 https://c.scudata.com/article/1724652505600