Trituración y concatenación de archivos.¡Hola!
Estoy trabajando en archivos grandes que consumen mucha memoria de la computadora cuando abro un solo archivo ... lo que hace que mi PC sea lenta y, a veces, cuelgue. Me preguntaba si hay una solución jsl donde un solo archivo pueda dividirse en archivos más pequeños antes de abrir ... Como File_A = 2GB, se dividirá en 4 archivos más pequeños de 250 MB cada uno. Luego automatizaré la apertura y la agregación / computación de cada archivo fragmentado, cerraré el archivo fragmentado abierto, luego concatenaré los resultados al siguiente archivo fragmentado que se procesará ... y luego el bucle continuará.
Gracias de antemano.
Re: Chunking y concatenando archivosSi no desea cargar la tabla en la memoria antes de dividirla, puede ser creativo con la forma en que carga los datos. Para archivos sin formato, especifique la posición de inicio y el número de filas para leer dentro de un bucle:
dtProbe = Open("$SAMPLE_DATA/Probe.jmp");
dtProbe << save( "$temp/deleteme123.txt" );
for( i = 1, i <= 2, i++,
dt = Open(
"$temp/deleteme123.txt",
columns(
New Column( "security to create", Character, "Nominal" ),
New Column( "resource", Character, "Nominal" ),
New Column( "group", Character, "Nominal" ),
New Column( "(ADM V-net)", Character, "Nominal" )
),
Import Settings(
Fixed Column Widths( 19, 9, 6, 105 ),
Strip Quotes( 0 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 0 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start( 1 ),
Data Starts( 1 + 100 * (i - 1) ),
Lines To Read( 100 ),
Year Rule( "20xx" )
)
)
);Re: Chunking y concatenando archivos @Nalla :
También me gustaría agregar que este no es el único enfoque que puede acelerar el procesamiento de estos datos. Si tuviera que hacer la tabla "invisible" o "privada", eso puede acelerar significativamente el proceso.
dt << Show Window(0);
Re: Chunking y concatenando archivos @Nalla :
Hola, esto ciertamente se puede hacer.
Mire la función "Subconjunto" en el Índice de secuencias de comandos: esto le ayudará a formar subconjuntos más pequeños de su tabla de datos grande. Aquí hay un ejemplo . A continuación, puede utilizar "Concat" para unirse a la tabla.
// Lets start with the assumption that there are 1000 rows in dt table
// Also say you want to subset n rows in each iteration ;
LL = 1;
UL = 250 ;
for(i = 1 , i <= 4 , i ++,
LL = LL * i ;
UL = UL * i ;
dt << Select Rows(Index(LL,UL,1)); // Assuming "dt" is your master table
dt1 = dt << Subset("Private",Selected Rows(1),Selected Columns(0));<BR /> LL = UL;
);