在给定内核和执行器数量的情况下,如何确定spark中rdd的分区数?

3pvhb19x  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(510)

有20个执行器的10个节点的集群和读100个文件的文件夹的代码的分区数是多少?

utugiqy6

utugiqy61#

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

sxpgvts3

sxpgvts32#

来自spark文档:
默认情况下,spark为文件的每个块创建一个分区(hdfs中的块默认为64mb),但是您也可以通过传递更大的值来请求更多的分区。请注意,分区不能少于块。
分区的数量还取决于文件的大小。如果文件太大,您可以选择有更多的分区。

k4emjkb1

k4emjkb13#

它在不同的模式下是不同的,您可以使用 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-行为
您可以根据正在读取的数据自行更改分区数。一些spark api提供了分区数的附加设置。
要进一步检查创建了多少个分区,请按照@sandeep purohit所说的做
rdd.getnumpartitions属性
它将导致被创建的分区的数量!
您还可以在使用两个api(即:合并和重新分区)创建partiton之后更改partiton的数量
链接到合并和重新分区:spark-repartition()vs coalesce()

相关问题