La pregunta es simple y me sorprende que no apareciera inmediatamente cuando la busqué.¿Cómo procesar las filas de un archivo CSV utilizando Groovy/GPars de manera más eficiente?
Tengo un archivo CSV, uno potencialmente muy grande, que debe procesarse. Cada línea debe entregarse a un procesador hasta que se procesen todas las filas. Para leer el archivo CSV, usaré OpenCSV, que básicamente proporciona un método readNext() que me da la siguiente fila. Si no hay más filas disponibles, todos los procesadores deben terminar.
Para esto creé un script groovy realmente simple, definí un método síncrono readNext() (ya que la lectura de la siguiente línea no consume mucho tiempo) y luego creé algunos hilos que leen la siguiente línea y la procesan. Funciona bien, pero ...
¿No debería haber una solución integrada que pudiera usar? No es el procesamiento de la colección gpars, porque eso siempre supone que hay una colección existente en la memoria. En cambio, no puedo permitirme leer todo en la memoria y luego procesarlo, me llevaría a excepciones fuera de la memoria.
Entonces ... ¿alguien que tenga una bonita plantilla para procesar un archivo CSV "línea por línea" usando un par de hilos de trabajo?
¿Está asumiendo en este ejemplo que la llamada readCsv() devuelve una sola línea del archivo CSV? Solo quiero asegurarme de estar leyendo esto bien. – Scott
Sí, 'readCsv()' leerá cada línea en secuencia. Cuando se llega al final del archivo, devolverá nulo, lo que le permite a los procesadores saber que se ha llegado al final y deben 'terminar()'. – ataylor