gpt4 book ai didi

apache-spark - 如何确定 Apache Spark 数据帧中的分区大小

转载 作者:行者123 更新时间:2023-12-05 01:09:59 25 4
gpt4 key购买 nike

我一直在使用 SE 此处发布的问题的出色答案来确定分区的数量以及分区在数据帧中的分布 Need to Know Partitioning Details in Dataframe Spark

有人可以帮我扩展答案以确定数据框的分区大小吗?

谢谢

最佳答案

调整分区大小不可避免地与调整分区数有关。在此范围内至少需要考虑 3 个因素:

并行度

“良好”的高并行度很重要,因此您可能希望拥有大量分区,从而缩小分区大小。

但是,由于以下第 3 点 - 分配开销,该数字存在上限。尽管如此,它仍然是优先级第一,所以假设你必须犯错误,从高并行度的一侧开始。

通常,建议每个核心执行 2 到 4 个任务。

In general, we recommend 2-3 tasks per CPU core in your cluster.

  • Spark in action(作者 Petar Zecevi´c)一书写道(第 74 页):

We recommend using three to four times more partitions than there are cores in your cluster

内存拟合

如果分区非常大(例如 > 1 GB),您可能会遇到诸如垃圾收集、内存不足错误等问题,尤其是在进行随机操作时,根据 Spark doc :

Sometimes, you will get an OutOfMemoryError, not because your RDDs don’t fit in memory, but because the working set of one of your tasks, such as one of the reduce tasks in groupByKey, was too large. Spark’s shuffle operations (sortByKey, groupByKey, reduceByKey, join, etc) build a hash table within each task to perform the grouping, which can often be large...

因此,大分区数量(或小分区大小)的另一个优点出现了。

分配开销

分布式计算会带来开销,因此您也不能走极端。如果每个任务的执行时间少于 100 毫秒,则应用程序可能会因以下原因而产生巨大的开销:

  • 数据获取、磁盘寻道
  • 数据移动、任务分发
  • 任务状态跟踪

,在这种情况下,您可以降低并行度并稍微增加分区大小。

外卖

根据经验,人们通常会尝试每个分区 100-1000MB,那么为什么不从这个开始呢?请记住,这个数字可能需要随时重新调整..

关于apache-spark - 如何确定 Apache Spark 数据帧中的分区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64600212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com