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
SELECT
welche Spalten explizit angezeigt werden sollen, möglichst nur die, die Sie benötigen; - (Raw query) Schleife in einem
while
Zyklus, bis Siefetch
können Zeilen durch Schleifen jeder Zeile. Die folgenden Techniken könnten funktionieren, indem eine Konstanten_rows
gesetzt wird um in den Speicher einzulesen undi
zu 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
,upperBound
undnumPartitions
(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 .