Sie versuchen, zu viele Daten in den RAM zu laden . Sie sollten zuerst die Datenmenge reduzieren, die SQL von Ihnen abruft, bevor sie Spark erreichen und optimieren Sie es mithilfe von Spark-Parametern, zum Beispiel partitions .
Erwägen Sie eine oder mehrere dieser Optimierungen:
- Angeben in
SELECTwelche Spalten explizit angezeigt werden sollen, möglichst nur die, die Sie benötigen; - (Raw query) Schleife in einem
whileZyklus, bis Siefetchkönnen Zeilen durch Schleifen jeder Zeile. Die folgenden Techniken könnten funktionieren, indem eine Konstanten_rowsgesetzt wird um in den Speicher einzulesen undizu aktualisieren Index jedes Radfahren:
LIMIT i,i+n_rows
BETWEEN i AND i+n_rows
WHILE primaryKey >= i AND primaryKey < i+n_rows
- Verwendung von Partitionen . Verwenden Sie
partitionColumn,lowerBound,upperBoundundnumPartitions(Referenz 1) und (Referenz 2) :
partitionColumn Wählen Sie die Spalte aus, die verwendet wird, um zu bestimmen, wie die Daten aufgeteilt werden sollen (z. B. der Primärschlüssel ).
lowerBound legt den Mindestwert fest von partitionColumn das wird geholt.
upperBound legt den Maximalwert fest von partitionColumn das wird geholt.
numPartitions bedeutet, wie viele parallele Verbindungen Sie zum Lesen von Daten über RDBMS einrichten möchten.
Spark ruft Ihre Datensätze also mit Zeilen ab, die Sie erhalten würden, wenn Sie SELECT * FROM table WHERE partitionColumn BETWEEN lowerBound AND upperBound ausführen würden .