Ciao, stavo provando a fare uno stack di serie multiple per un set di dati (3,5 milioni di righe e 225 colonne). Sta dando problemi di overflow di RAM (memoria esaurita). Utilizzo 32 GB di RAM. C'è un modo per farlo in serie per evitare il problema di memoria e ottenere la tabella di dati prevista?
Una singola tabella di dati con 3,5 milioni di righe e 225 colonne = 787,5 milioni di righe, mi costa 12+GB. La normale tabella impilata avrà 3,5MX 225 = 787,5 milioni di righe e due colonne (la seconda è l'etichetta), che saranno facilmente nell'intervallo di circa 20 GB, quindi non coesisteranno su 32 GB di RAM.
Suggerisco la seguente sequenza:
- Prendi i dati originali di 3,5 milioni di righe e 225 colonne, salva le singole colonne in file separati, uno alla volta. E chiudi il nuovo file ogni volta dopo averlo salvato. Ogni file salvato ha due colonne, una è la serie, l'altra è l'indicatore o l'etichetta. Utilizzare il tipo numerico per l'etichetta. Nel tuo caso, usa solo da 1 a 225. (Facoltativo, prova a comprimere la colonna dell'etichetta. E la colonna di compressione utilizzerà un campo da 2 byte.)
- Chiudi il grande file originale.
- Apri il primo file salvato con una colonna. Quindi concatena altri singoli file, uno alla volta, con l'opzione "Aggiungi alla prima tabella" selezionata. E chiudi tutti i singoli file immediatamente dopo che sono stati aggiunti.
Ho provato ad aggiungere 3,5 milioni di righe e una piccola tabella a 2 colonne al grande tavolo da 787,5 milioni di righe e 2 colonne. Il consumo di memoria massimo da parte di JMP a volte superava i 20 GB, ma è sopravvissuto e si è ridotto a circa 18+ GB dopo il completamento della concatenazione. E ho continuato ad aggiungere per un altro paio di round, ho osservato un comportamento simile. E vedo un risparmio di memoria più sostanziale se utilizzo colonne compresse. Ad ogni modo, sembra vale la pena provare. Buona fortuna!
A proposito, come intendi analizzare i dati? Quale piattaforma vuoi utilizzare?