【问题标题】:Why does Spark increment the RDD ID by 2 instead of 1 when reading in text files?为什么 Spark 在读取文本文件时将 RDD ID 增加 2 而不是 1?
【发布时间】: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


【解决方案1】:

因为单个方法调用可以创建多个中间RDD。如果你检查调试字符串会很明显

sc.textFile("README.md").toDebugString
String =
(2) README.md MapPartitionsRDD[1] at textFile at <console>:25 []
 |  README.md HadoopRDD[0] at textFile at <console>:25 []

如您所见,沿袭由两个 RDD 组成。

  • 第一个是HadoopRDD,对应于data import

    hadoopFile(path, classOf[TextInputFormat], classOf[LongWritable], classOf[Text],
      minPartitions)
    
  • 第二个是MapPartitionsRDD,对应the subsequent map,它丢弃键(偏移量)并将Text转换为String

    .map(pair => pair._2.toString).setName(path)
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    • 2018-09-30
    • 2017-02-25
    相关资源
    最近更新 更多