如何配置分区数不超过可用内核数?

How to configure the number of partition not exceeds available cores?

我正在寻找一种方法来根据可用内核的大小对我的应用程序中的所有数据帧进行分区。如果我的可用内核(执行程序的数量 * 每个执行程序的内核数量)是 20,那么我想将我所有的数据框重新分区为 20..

我能看到重新分区我的数据帧的唯一方法是 df.repartition(20),但我希望将它应用于我的应用程序中存在的所有数据帧,而不必为每个数据帧编写 df.repartition(20)

更改 spark.default.parallelism conf 不起作用,因为它仅在您在 RDD(较低级别 api)而不是在数据帧上工作时应用..

对此有什么建议吗?

如果您使用的是 DataFrame/Dataset API,那么您可以使用此配置指令设置默认随机分区的数量:

spark.sql.shuffle.partitions

您可以在 Performance Tuning 页面上阅读有关此配置选项的更多信息。

使用此配置选项,任何触发数据随机播放的转换都会自动将数据重新分区到此数量的分区。