首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >星火RDD中的分区数

问星火RDD中的分区数
EN

Stack Overflow用户
提问于 2020-05-31 08:46:44
回答 1查看 312关注 0票数 0

我通过指定分区数来从文本文件创建一个RDD (Spark1.6)。但是它给出了与指定分区不同的分区数。

案例1

代码语言:javascript
复制
scala> val people = sc.textFile("file:///home/pvikash/data/test.txt", 1)
people: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[50] at textFile at <console>:27

scala> people.getNumPartitions
res36: Int = 1

scala> val people = sc.textFile("file:///home/pvikash/data/test.txt", 2)
people: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[52] at textFile at <console>:27

scala> people.getNumPartitions
res37: Int = 2

scala> val people = sc.textFile("file:///home/pvikash/data/test.txt", 3)
people: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[54] at textFile at <console>:27

scala> people.getNumPartitions
res38: Int = 3

scala> val people = sc.textFile("file:///home/pvikash/data/test.txt", 4)
people: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[56] at textFile at <console>:27

scala> people.getNumPartitions
res39: Int = 4

案例2

代码语言:javascript
复制
scala> val people = sc.textFile("file:///home/pvikash/data/test.txt", 0)
people: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[72] at textFile at <console>:27

scala> people.getNumPartitions
res47: Int = 1

案例3

代码语言:javascript
复制
scala> val people = sc.textFile("file:///home/pvikash/data/test.txt", 5)
people: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[58] at textFile at <console>:27

scala> people.getNumPartitions
res40: Int = 6

scala> val people = sc.textFile("file:///home/pvikash/data/test.txt", 6)
people: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[60] at textFile at <console>:27

scala> people.getNumPartitions
res41: Int = 7

scala> val people = sc.textFile("file:///home/pvikash/data/test.txt", 7)
people: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[62] at textFile at <console>:27

scala> people.getNumPartitions
res42: Int = 8

scala> val people = sc.textFile("file:///home/pvikash/data/test.txt", 8)
people: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[64] at textFile at <console>:27

scala> people.getNumPartitions
res43: Int = 9

scala> val people = sc.textFile("file:///home/pvikash/data/test.txt", 10)
people: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[68] at textFile at <console>:27

scala> people.getNumPartitions
res45: Int = 11

案例4

代码语言:javascript
复制
scala> val people = sc.textFile("file:///home/pvikash/data/test.txt", 9)
people: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[66] at textFile at <console>:27

scala> people.getNumPartitions
res44: Int = 11

scala> val people = sc.textFile("file:///home/pvikash/data/test.txt", 11)
people: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[70] at textFile at <console>:27

scala> people.getNumPartitions
res46: Int = 13

文件/home/pvikash/data/test.txt的内容如下:

这是一个测试文件。将用于rdd分区。

基于上述情况,我有几个问题。

  1. 对于例2,显式指定的分区数为0,但实际分区数为1(甚至默认最小分区数为2),为什么实际分区数为1?
  2. 对于第3种情况,为什么在指定的分区数上的实际分区数更改为+1?
  3. 对于第4种情况,为什么在指定的分区数上的实际分区数更改为+2?
  4. 为什么火花在案例1,案例2,案例3和案例4中表现不同?
  5. 如果输入数据的大小很小(这可以很容易地安装到单个分区中),那么为什么single会创建空分区呢?

任何解释都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2020-05-31 12:08:28

不是一个完整的答案,但它可能会让你更接近它。

你要输入的那个号码叫做minSplits。它对最小分区数有影响,仅此而已。

代码语言:javascript
复制
def textFile(path: String, minSplits: Int = defaultMinSplits): RDD[String]

分裂的数目应由getSplits方法(文档)来控制。

这个所以贴应该回答问题5

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62113697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档