La domanda è semplice e sono sorpreso che non sia comparso immediatamente quando l'ho cercato.Come elaborare le righe di un file CSV utilizzando Groovy/GPars nel modo più efficiente?
Ho un file CSV, potenzialmente molto grande, che deve essere elaborato. Ogni riga deve essere consegnata a un processore fino a quando tutte le righe vengono elaborate. Per leggere il file CSV, userò OpenCSV che essenzialmente fornisce un metodo readNext() che mi dà la riga successiva. Se non sono disponibili più righe, tutti i processori dovrebbero terminare.
Per questo ho creato uno script groovy davvero semplice, definito un metodo readNext() sincrono (poiché la lettura della riga successiva non richiede molto tempo) e quindi creato alcuni thread che leggono la riga successiva e lo elaborano. Funziona bene, ma ...
Non dovrebbe esserci una soluzione integrata che potrei usare? Non è l'elaborazione della collezione gpars, perché presuppone sempre che ci sia una collezione esistente in memoria. Invece, non posso permettermi di leggere tutto in memoria e poi elaborarlo, porterebbe a eccezioni eccezionali.
Quindi ... chiunque abbia un modello piacevole per l'elaborazione di un file CSV "riga per riga" utilizzando un paio di thread di lavoro?
Si suppone che in questo esempio la chiamata readCsv() restituisca una singola riga del CSV? Voglio solo assicurarmi che sto leggendo bene. – Scott
Sì, 'readCsv()' leggerà ogni riga in sequenza. Quando viene raggiunta la fine del file, restituisce null, che consente ai processori di sapere che la fine è stata raggiunta e che devono 'terminate()'. – ataylor