当前位置: 首页 > 知识库问答 >
问题:

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

龙欣德
2023-03-14

我一直在使用SE上发布的问题的一个极好的答案来确定分区的数量,以及跨数据帧的分区分布需要知道数据帧Spark中的分区详细信息

有人能帮我扩展答案来确定数据帧的分区大小吗?

谢谢

共有1个答案

岑俊明
2023-03-14

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

“好的”高水平的并行性很重要,因此您可能希望有大量的分区,从而导致较小的分区大小。

然而,由于以下第三点——分配开销,这个数字有一个上限。尽管如此,它仍然被列为优先级#1,所以假设如果你必须犯错误,从高水平的并行性开始。

一般来说,建议每个核心执行2到4个任务。

  • 火花博士:

一般来说,我们建议集群中每个CPU核心执行2-3个任务。

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

我们建议使用的分区数量是集群中核心数量的三到四倍

如果分区大小非常大(例如。

有时,您会出现OutOfMemory错误,这不是因为RDD不适合内存,而是因为您的一个任务(例如groupByKey中的一个reduce任务)的工作集太大。Spark的shuffle操作(sortByKey、groupByKey、reduceByKey、join等)在每个任务中构建一个哈希表来执行分组,这个哈希表通常很大。。。

因此,大分区(或小分区大小)的另一个优点就来了。

分布式计算伴随着开销,所以你也不能走极端。如果每个任务执行时间少于100ms,应用程序可能会有显著的开销,原因是:

  • 数据提取、磁盘查找

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

外卖

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

 类似资料:
  • 有人能解释一下将为Spark Dataframe创建的分区数量吗。 我知道对于RDD,在创建它时,我们可以提到如下分区的数量。 但是对于创建时的Spark数据帧,看起来我们没有像RDD那样指定分区数量的选项。 我认为唯一的可能性是,在创建数据帧后,我们可以使用重新分区API。 有人能告诉我在创建数据帧时,我们是否可以指定分区的数量。

  • 本文向大家介绍如何确定R数据帧列中具有最小值和最大值的行?,包括了如何确定R数据帧列中具有最小值和最大值的行?的使用技巧和注意事项,需要的朋友参考一下 在数据分析中,我们经常需要确定最小值和最大值,因为这些值有助于我们理解所考虑的列或变量的限制。可以通过在单个方括号中使用which.max表示最大值,并使用which.min表示最小值来提取行。 示例 请看以下数据帧- 输出结果 确定具有特定列的最

  • 我需要使用 spark-sql 加载一个 Hive 表,然后对其运行一些机器学习算法。我是这样写的: 它工作得很好,但如果我想增加数据集数据帧的分区数,我该怎么做?使用普通RDD,我可以写: 我想要有N个分区。 谢谢

  • 在生产者-消费者web应用程序中,为kinesis流碎片创建分区键的思路应该是什么。假设,我有一个带有16个碎片的kinesis流,我应该创建多少个分区键?真的取决于碎片的数量吗?

  • 我们有没有可能在Spark中先按一列分区,然后再按另一列聚类? 在我的例子中,我在一个有数百万行的表中有一个< code>month列和一个< code>cust_id列。我可以说,当我将数据帧保存到hive表中,以便根据月份将该表分区,并按< code>cust_id将该表聚类成50个文件吗? 忽略按< code>cust_id的聚类,这里有三个不同的选项 第一种情况和最后一种情况在 Spark

  • spark如何在使用< code>orderBy后确定分区的数量?我一直以为生成的数据帧有< code > spark . SQL . shuffle . partitions ,但这似乎不是真的: 在这两种情况下,spark都< code >-Exchange range partitioning(I/n ASC NULLS FIRST,200),那么第二种情况下的分区数怎么会是2呢?