Ciao!
Sto lavorando su file di grandi dimensioni che consumano molta memoria del computer quando apro anche un singolo file ... causando un rallentamento del mio PC ea volte riagganciare. Mi chiedevo se esiste una soluzione jsl in cui un singolo file può essere suddiviso in file più piccoli prima di aprirlo ... Come File_A = 2 GB, sarà suddiviso in 4 file più piccoli di 250 MB ciascuno. Quindi automatizzerò l'apertura e l'aggregazione / calcolo di ogni file chunked, chiuderò il file aperto chunked, quindi concateneremo i risultati al prossimo file chunked che verrà elaborato .... quindi il ciclo continua.
Grazie in anticipo.
Se non si desidera caricare la tabella in memoria prima di dividerla, è possibile essere creativi con il modo in cui si caricano i dati. Per i file flat, specificare la posizione iniziale e il numero di righe da leggere all'interno di un ciclo:
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" )
)
)
); @Nalla :
Vorrei anche aggiungere che questo non è l'unico approccio che può accelerare l'elaborazione di questi dati. Se dovessi rendere il tavolo "invisibile" o "privato", ciò potrebbe velocizzare significativamente il processo.
dt << Show Window(0);
@Nalla :
Ciao, questo può certamente essere fatto.
Guarda la funzione "Sottoinsieme" nello Scripting Index - questo ti aiuterà a formare sottoinsiemi più piccoli della tua grande tabella di dati. Ecco un esempio. È quindi possibile utilizzare "Concat" per unire la tabella.
// 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;
);