Ho k
csv files (5 file csv per esempio), ogni file ha m
campi che producono una chiave e valori n
. Ho bisogno di produrre un singolo file CSV con dati aggregati.
Sto cercando la soluzione più efficiente per questo problema, soprattutto la velocità. Non penso dal modo in cui avremo problemi di memoria. Inoltre vorrei sapere se l'hashing è davvero una buona soluzione perché dovremo usare una soluzione di hashing a 64 bit per ridurre le possibilità di una collisione a meno dell'1% (stiamo avendo circa 30000000 righe per aggregazione).
Ad esempio
file 1: f1,f2,f3,v1,v2,v3,v4
a1,b1,c1,50,60,70,80
a3,b2,c4,60,60,80,90
file 2: f1,f2,f3,v1,v2,v3,v4
a1,b1,c1,30,50,90,40
a3,b2,c4,30,70,50,90
result: f1,f2,f3,v1,v2,v3,v4
a1,b1,c1,80,110,160,120
a3,b2,c4,90,130,130,180
algoritmo che abbiamo pensato fino ad ora:
-
hashing (usando concurentHashTable)
-
unisci l'ordinamento dei file
-
DB: usando mysql o hadoop o redis.
La soluzione deve essere in grado di gestire una grande quantità di dati (ogni file più di due milioni di righe)
un esempio migliore: file 1
country,city,peopleNum
england,london,1000000
england,coventry,500000
file 2:
country,city,peopleNum
england,london,500000
england,coventry,500000
england,manchester,500000
file unito:
country,city,peopleNum
england,london,1500000
england,coventry,1000000
england,manchester,500000
La chiave è: country,city
. Questo è solo un esempio, la mia vera chiave è di dimensione 6 e le colonne di dati sono di dimensione 8 - totale di 14 colonne.
Vorremmo che la soluzione fosse la più veloce per quanto riguarda l'elaborazione dei dati.