sql >> データベース >  >> RDS >> Mysql

java.lang.OutofMemorySpace:pysparkのデータベースから1億2000万行をフェッチしている間のJavaヒープスペース

    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を使用する 、lowerBoundupperBound およびnumPartitions (参照1) および(参照2)

    partitionColumn データの分割方法を決定するために使用される列を選択します(たとえば、主キー

    lowerBound 最小値を安定させる partitionColumnの フェッチされます。

    upperBound 最大値を安定させる partitionColumnの フェッチされます。

    numPartitions RDBMSを介してデータを読み取るために設定する並列接続の数を意味します。

    したがって、Sparkは、SELECT * FROM table WHERE partitionColumn BETWEEN lowerBound AND upperBoundを実行した場合に取得する行を使用してデータセットを取得します。 。




    1. MySQLですべてのストアドプロシージャを一覧表示する2つの方法

    2. グラフのエッジの重みを見つけるためのMySQLクエリ

    3. Postgresで値をインクリメントします

    4. PostgreSQLでは、COPYコマンドでデータを挿入する方法は?