Parkett hat beim Lesen keinen Speicher mehr

8

Ich versuche, mich gegen eine große Matrix zu vermehren, die im Parkettformat gespeichert ist. Ich achte also darauf, die RDD nicht im Speicher zu speichern, sondern bekomme vom Parkettleser einen OOM-Fehler:

%Vor%

Insbesondere ist die Matrix eine 46752-by-54843120 dichte Matrix von 32-Bit-Schwimmern, die im Parkettformat gespeichert ist (jede Zeile ist etwa 1,7 GB unkomprimiert).

Der folgende Code lädt diese Matrix als Spark IndexedRowMatrix und multipliziert sie mit einem Zufallsvektor (die Zeilen werden mit einer zugehörigen Zeichenfolgenbezeichnung gespeichert, und die Gleitkommazahlen müssen in Doppelwerte konvertiert werden, da IndexedRows nur Doppelungen verwenden kann):

%Vor%

Ich verwende die folgenden Optionen beim Ausführen von

%Vor%

Es gibt 25573 Partitionen für die Parkettdatei, daher sollten die unkomprimierten Float-Werte jeder Partition kleiner als 4 GB sein. Ich erwarte, dass dies bedeutet, dass der aktuelle Executor-Speicher viel mehr als ausreichend ist (ich kann die Executor-Speicher-Einstellung nicht erhöhen).

Irgendwelche Ideen, warum dies zu OOM-Fehlern führt und wie man es beheben kann? Soweit ich das beurteilen kann, gibt es für den Parkettleser keinen Grund, etwas zu lagern.

    
AatG 06.12.2015, 06:02
quelle

0 Antworten