Car*_* DM 6 partitioning distribution apache-spark pyspark
我有一份带有倾斜数据的火花工作。数据需要基于列进行分区。我想告诉 spark 首先开始处理最大的分区,以便我可以更有效地使用可用资源。
推理如下:我总共有 10000 个分区,其中 9999 个分区只需 1 分钟处理,1 个分区需要 10 分钟处理。如果我先得到重分区,我可以在 11 分钟内完成这项工作,如果我最后得到它需要 18 分钟。
有没有办法确定分区的优先级?你能理解这个吗?
如果您的数据是倾斜的,即您的大部分数据存在于单个分区中,并且您的数据未在所有分区中平均分配。在这种情况下,您无法充分利用 Spark 并行化。
我总共有 10000 个分区,其中 9999 个分区只需要 1 分钟处理,1 个分区需要 10 分钟处理。如果我先得到重型分区,我可以在 11 分钟内完成这项工作,如果我最后得到它,则需要 18 分钟。
它不是那样工作的。每个分区将仅由一个任务或线程执行。因此,在您的情况下,所有其他任务都会完成,并且由于数据倾斜,只有任务需要时间才能完成。
处理和加快进程的方法。
均匀分布您的数据
例如,如果您没有任何分区键,则将一个新列添加为您想要的序列号%numberOfpartitionsyouwant到您的数据帧。例如,如果您想要 10 个分区,那么
您想要的分区数量 = 10
因此每个数据将在数字 0 到 9 之间进行分区。然后使用这个新列按新数据帧进行分区。
| 归档时间: |
|
| 查看次数: |
898 次 |
| 最近记录: |