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
を実行した場合に取得する行を使用してデータセットを取得します。 。