并行处理大 csv 文件
某 csv 文件存储大量订单。
OrderID,Client,SellerID,Amount,OrderDate 1,SPLI,219,9173,01/17/2022 2,HU,110,6192,10/01/2020 3,SPL,173,5659,04/23/2020 4,OFS,7,3811,02/05/2023 5,ARO,146,3752,08/27/2021 6,SRR,449,10752,05/27/2022 7,SJCH,326,11719,01/18/2022 8,JDR,3,11828,12/09/2021 |
要求用 Java 并行处理该文件,选出金额介于 3000 至 5000 美元的订单,按客户分组,统计订单金额和订单数量。
Client | amt | cnt |
ARO | 11948382 | 2972 |
BDR | 11720848 | 2933 |
BON | 11864952 | 2960 |
BSF | 11947734 | 2980 |
CHO | 11806401 | 2968 |
CHOP | 11511201 | 2877 |
D | 11491452 | 2876 |
DSG | 11672114 | 2910 |
DSGC | 11656479 | 2918 |
编写SPL语句
=file("d:/OrdersBig.csv").cursor@mtc(;8).select(Amount>=3000 && Amount<5000).groups(Client;sum(Amount):amt,count(1):cnt)
函数cursor用来解析超出内存的大文件,默认单线程,@m表示多线程并行读取,后面的8是并行数,@t表示首行是表头,@c表示分隔符是逗号。
Java 集成 SPL 可参考 Java 如何调用 SPL 脚本
SPL开源地址