并行处理大 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