RAMにロードしようとしていますデータが多すぎます 。 Spark に到達する前に、SQLが取得するデータの量を最初に減らす必要があります。 パーティションなどのスパークパラメータを使用して最適化します 。
これらの最適化の1つ以上を検討してください:
-
SELECTで指定します 明示的に表示する列。可能であれば、必要な列のみ。 - (生のクエリ)
whileでループするfetchできるようになるまでサイクルします 各行をループすることによって行。次の手法は、定数n_rowsを設定することで機能します。 メモリを読み取り、iを更新します 各サイクリングにインデックスを付ける:
LIMIT i,i+n_rows
BETWEEN i AND i+n_rows
WHILE primaryKey >= i AND primaryKey < i+n_rows
- パーティションの使用 。
partitionColumnを使用する 、lowerBound、upperBoundおよびnumPartitions(参照1) および(参照2) :
partitionColumn データの分割方法を決定するために使用される列を選択します(たとえば、主キー 。
lowerBound 最小値を安定させる partitionColumnの フェッチされます。
upperBound 最大値を安定させる partitionColumnの フェッチされます。
numPartitions RDBMSを介してデータを読み取るために設定する並列接続の数を意味します。
したがって、Sparkは、SELECT * FROM table WHERE partitionColumn BETWEEN lowerBound AND upperBoundを実行した場合に取得する行を使用してデータセットを取得します。 。