spark.sql.shuffle.partitions
とspark.default.parallelism
の違いは何ですか?
両方をSparkSQL
に設定しようとしましたが、2番目のステージのタスク番号は常に200です。
答えから here 、spark.sql.shuffle.partitions
は、結合または集約のためにデータをシャッフルするときに使用されるパーティションの数を構成します。
spark.default.parallelism
は、RDD
、join
、およびreduceByKey
などの変換によって返されるparallelize
sのパーティションのデフォルト数であり、ユーザーが明示的に設定していない場合。 spark.default.parallelism
は未加工のRDD
でのみ機能しているようで、データフレームを使用する場合は無視されることに注意してください。
実行しているタスクが結合または集約ではなく、データフレームで作業している場合、これらを設定しても効果はありません。ただし、コードでdf.repartition(numOfPartitions)
(新しいval
に割り当てることを忘れないでください)を呼び出すことで、自分でパーティションの数を設定できます。
コードの設定を変更するには、次のようにします。
sqlContext.setConf("spark.sql.shuffle.partitions", "300")
sqlContext.setConf("spark.default.parallelism", "300")
または、spark-submit
を使用してクラスターにジョブを送信するときに変更を加えることができます。
./bin/spark-submit --conf spark.sql.shuffle.partitions=300 --conf spark.default.parallelism=300
spark.default.parallelismは、sparkで設定されるパーティションのデフォルト数であり、デフォルトでは200です。また、パーティションの数を増やしたい場合は、プロパティを適用できます- spark.sql.shuffle.partitions spark構成またはspark SQLの実行中にパーティションの数を設定します。
通常、これはspark.sql.shuffle.partitionsメモリの混雑があり、以下のエラーが表示される場合に使用されます:spark error:Java.lang.IllegalArgumentException:Size exceeded Integer .MAX_VALUE
したがって、パーティションごとに256 MBとしてパーティションを割り当てることができ、プロセスに設定するために使用できるように設定します。
また、パーティションの数が2000に近い場合は、2000以上に増やします。sparkは、パーティション<2000および> 2000に異なるロジックを適用します。 2000を超える場合は高度に圧縮されます。