分区如何在Spark中工作?

abh*_*ala 17 partitioning apache-spark

我试图了解如何在Apache Spark中完成分区.你能帮忙吗?

这是场景:

  • 主节点和两个节点,每个节点有1个核心
  • 一个count.txt10 MB大小的文件

以下创建了多少个分区?

rdd = sc.textFile(count.txt)
Run Code Online (Sandbox Code Playgroud)

文件大小是否对分区数有影响?

mrm*_*reg 21

默认情况下,为每个HDFS分区创建一个分区,默认情况下为64MB(来自Spark编程指南).

可以传递另一个参数defaultMinPartitions,该参数会覆盖spark将创建的最小分区数.如果不重写此值,则spark将创建至少与之相同的分区spark.default.parallelism.

由于spark.default.parallelism应该是群集中所有计算机的核心数,因此我认为在您的案例中至少会创建3个分区.

您还repartition可以coalesce使用RDD来更改分区数,从而影响可用并行度的总量.

  • @jacek如果是`default.parallelism`(创建了3个分区),数据文件是10 MB(HDFS上的单个块),Spark分区包含多少数据?它会是:**1.分为3个相等的部分(每个3.3 MB)并发送给遗嘱执行人.**_2.未划分(P1 = 10MB,P2 = P3 = 0 MB)并且由于数据位置而在同一节点上执行._**3.所有3个分区中的随机数据随机播放.** (2认同)
  • @mrmcgrep,有一个混乱,在您说的第一个语句中,默认情况下将为每个 HDFS 块创建一个分区,然后在您说的第三个语句中,如果我们不覆盖 `defaultMinPartitions`,那么它将创建至少相同数量的分区为 `spark.default.parallelism`,假设是整个集群的核心数。那么它会创建`partition=HDFS partition`还是`=number of cores`? (2认同)