Pregunta

He ideado una forma de realizar muestreos de yacimientos en Java, el código que utilicé es aquí.

He colocado un archivo enorme para leerlo ahora, y me lleva unos 40 segundos leer el lote antes de mostrar los resultados en la pantalla y luego volver a leer el lote.El archivo es demasiado grande para almacenarlo en la memoria y simplemente elija una muestra aleatoria de él.

Esperaba poder escribir un bucle while adicional allí para que superara mi reservoirList en un período de tiempo determinado, y no justo después de terminar de escanear el archivo.

Algo como:

long startTime = System.nanoTime();
timeElapsed = 0;
while(sc.hasNext()) //avoid end of file
    do{
       long currentTime = System.nanoTime();
       timeElapsed = (int)  TimeUnit.MILLISECONDS.convert(startTime-currentTime,
               TimeUnit.NANOSECONDS);
       //sampling code goes here
    }while(timeElapsed%5000!=0)
    return reservoirList;
} return reservoirList;

Pero esto genera un montón (no la longitud completa de mi ReservoirList) de líneas y luego una secuencia completa (¿unos cientos?) de la misma línea.

¿Existe una forma más elegante de hacer esto?Uno que, quizás, funcione si es posible.

¿Fue útil?

Solución

He hecho trampa.Por ahora estoy generando cada X líneas leídas del archivo, donde X es lo suficientemente grande como para darme un buen retraso entre cada muestra.Utilizo el recuento del programa de muestreo para determinar cuándo ocurre esto.

do {
    //sampling which includes a count++
}while(count%5000!=0)

Una nota final: inicializo la cuenta hasta 1 para evitar que genere las primeras diez líneas como muestra.

Si alguien tiene una solución mejor basada en el tiempo, hágamelo saber.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top