并行处理大 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 脚本
问题来源:https://stackoverflow.com/questions/70586145/how-to-read-a-specific-column-of-a-row-from-a-csv-file-in-java
英文版 https://c.scudata.com/article/1725264639465