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

RDD中的分区数量和Spark中的性能

笪德华
2023-03-14

在 Pyspark 中,我可以从列表中创建一个 RDD 并决定有多少个分区:

sc = SparkContext()
sc.parallelize(xrange(0, 10), 4)

我决定对RDD进行分区的分区数量如何影响性能?这如何取决于我的机器的核心数量?

共有3个答案

颛孙钱青
2023-03-14

分区数量对Spark的代码性能有很大影响。

理想情况下,spark分区意味着您要重新整理多少数据。通常,您应该根据您的混洗大小(混洗读/写)设置此参数,然后可以将每个分区的分区数设置为128到256 MB,以获得最佳性能。

通过将属性设置为,可以在spark sql代码中设置分区:

Spark.sql.shuffle.partitions

或者在使用任何数据帧时,您可以通过以下方式进行设置:

df.重新分区(numOfPartitions)

南宫才英
2023-03-14

为了补充javadba的出色回答,我记得文档建议将分区数设置为集群中CPU核数的3或4倍,以便在可用CPU核之间更均匀地分配工作。这意味着,如果集群中每个CPU核心只有一个分区,那么您将不得不等待一个运行时间最长的任务完成,但如果您进一步分解了该任务,那么工作负载将与晚上运行的快任务和慢任务更均衡。

谭思博
2023-03-14

主要效果是指定的分区太少或太多。

分区太少您将无法利用集群中可用的所有核心。

分区太多在管理许多小任务时会有过多的开销。

在这两者之间,第一个对性能的影响要大得多。对于分区计数低于1000的情况,调度太多的小任务对这一点的影响相对较小。如果你有几万个分区,那么spark就会变得非常慢。

 类似资料:
  • 因此,如何跨辅助节点对RDD进行分区,是将被分区的单个RDD还是一个完整的批处理。 我可能拿错了。请指引我

  • 我通过指定分区的数量从文本文件创建RDD(Spark 1.6)。但它给我的分区数与指定的分区数不同。 案例1 案例2 案例3 案例4 文件/home/pvikash/data/test的内容。txt是: 这是一个测试文件。将用于rdd分区 基于以上案例,我有几个问题。 对于案例2,显式指定的分区数为0,但实际分区数为1(即使默认最小分区为2),为什么实际分区数为1? 对于案例3,为什么在指定数量的

  • 我从HDFS中获取数据,并将其存储在Spark RDD中。Spark根据HDFS块的数量创建分区的数量。这会导致大量的空分区,这些分区也会在管道过程中得到处理。为了消除这种开销,我想从RDD中过滤掉所有的空分区。我知道合并和重新分区,但不能保证所有空分区都会被删除。 还有别的办法吗?

  • 我浏览了一下Spark中RDD和Dataframe的链接有什么区别? > 我们可以在spark上运行Pandas、numpy数据帧功能吗。对于numpy,np。像df这样的熊猫在哪里和在哪里。分组依据[“”]。agg()

  • 在Spark流式传输中,是否可以将特定的RDD分区分配给集群中的特定节点(为了数据局部性?) 例如,我得到一个事件流[a,a,a,b,b],并有一个2节点的Spark集群。 我希望所有的a总是去节点1,所有的b总是去节点2。 谢啦!

  • 我想在我的spark rdd上做一个映射, 但是,这给了我一个已经关闭的连接异常,正如预期的那样,因为在控件到达之前,我的是关闭的。我想为每个RDD分区创建一个连接,并正确地关闭它。我如何实现这一点? 谢谢