【发布时间】:2018-11-29 17:30:28
【问题描述】:
我在使用spark-shell 时注意到了一些有趣的事情,我很好奇为什么会发生这种情况。我使用基本语法将文本文件加载到 Spark 中,然后我只是简单地重复此命令。 REPL 的输出如下:
scala> val myreviews = sc.textFile("Reviews.csv")
myreviews: org.apache.spark.rdd.RDD[String] = Reviews.csv MapPartitionsRDD[1] at textFile at <console>:24
scala> val myreviews = sc.textFile("Reviews.csv")
myreviews: org.apache.spark.rdd.RDD[String] = Reviews.csv MapPartitionsRDD[3] at textFile at <console>:24
scala> val myreviews = sc.textFile("Reviews.csv")
myreviews: org.apache.spark.rdd.RDD[String] = Reviews.csv MapPartitionsRDD[5] at textFile at <console>:24
scala> val myreviews = sc.textFile("Reviews.csv")
myreviews: org.apache.spark.rdd.RDD[String] = Reviews.csv MapPartitionsRDD[7] at textFile at <console>:24
我知道MapPartitionsRDD[X] 部分以X 作为RDD 标识符。但是,基于这个SO post on RDD identifiers,我希望标识符整数在每次创建新的RDD 时增加一。那么为什么它会增加 2 呢?
我的猜测是加载文本文件会创建一个中间 RDD?因为显然从parallelize() 创建 RDD 只会将 RDD 计数器增加 1(之前为 7):
scala> val arrayrdd = sc.parallelize(Array(3,4,5))
arrayrdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[8] at parallelize at <console>:24
注意:我不相信这个数字与分区有任何关系。如果我打电话,我会发现我的 RDD 被分成 9 个分区:
scala> myreviews.partitions.size
res2: Int = 9
【问题讨论】:
-
在 rdd 上调用 getNumPartitions 应该会给你一个想法
-
@sramalingam24 我得到的分区值为 9 - 这与 ID 号有什么关系?
标签: scala apache-spark rdd