考虑到核心和执行器的数量,如何确定spark中rdd的分区数?

时间:2016-11-29 13:40:02

标签: scala hadoop apache-spark cluster-computing rdd

具有20个执行程序的10个节点集群的分区数和读取包含100个文件的文件夹的代码是什么?

3 个答案:

答案 0 :(得分:1)

您运行的不同模式有所不同,您可以使用spark.default.parallelism设置进​​行调整。来自Spark文档:

  

对于没有父RDD并行化的操作,它取决于   集群管理器:

Local mode: number of cores on the local machine
Mesos fine grained mode: 8
Others: total number of cores on all executor nodes or 2, whichever is larger

相关文档的链接: http://spark.apache.org/docs/latest/configuration.html#execution-behavior

您可以根据您正在阅读的数据自行更改分区数。某些Spark API提供了分区数量的附加设置。

进一步检查创建了多少分区,如@Sandeep Purohit所说

rdd.getNumPartitions

它将导致创建的分区数量!

您也可以使用两个Api来更改分区数量,即:合并和重新分区

指向合并和重新分区的链接:Spark - repartition() vs coalesce()

答案 1 :(得分:0)

来自Spark doc:

  

默认情况下,Spark为文件的每个块创建一个分区   (默认情况下,HDFS中的块为64MB),但您也可以要求   通过传递更大的值可以获得更高的分区数。请注意你   不能有比分块少的分区。

分区数量还取决于文件的大小。如果文件太大,您可以选择更多分区。

答案 2 :(得分:0)

scala / java对象RDD的分区数量将取决于机器的核心,如果您使用Hadoop输入文件创建RDD,那么它将依赖于您可以找到的hdfs(依赖于版本)的块大小RDD中的分区数如下

<强> rdd.getNumPartitions