有两个同构的大 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 脚本