Spark WordCount 产生多少个 RDD

Posted Just do DT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark WordCount 产生多少个 RDD相关的知识,希望对你有一定的参考价值。

曾经在一次面试中被问到 Spark WordCount 产生多少个 RDD,您知道么?下面通过源码来说明经典的 WordCount 到底产生多少个 RDD。

 import org.apache.spark.{SparkConf, SparkContext}
 
 object WordCount {
  def main(args: Array[String]): Unit = {
 
  val conf = new SparkConf().setAppName("WordCountApp").setMaster("local[2]")
  val sc = new SparkContext(conf)
  val wc = sc.textFile("hdfs://hadoop001:9000/data/wordcount.txt")
  .flatMap(x=>(x.split(","))).map(x=>(x,1)).reduceByKey(_+_)
  .saveAsTextFile("hdfs://hadoop001:9000/data/output")
 
  sc.stop()
  }
 
 }
 


textFile()

通过下面的源码,可以看到在这个方法中先调用了一个 hadoopFile 方法再调用 map 方法

Spark WordCount 产生多少个 RDD

hadoopFile 方法返回的是个 RDD(HadoopRDD),在对这个RDD调用map方法,

点到map方法中可以看到 ,map方法中产生了一个MapPartitionsRDD

Spark WordCount 产生多少个 RDD


Spark WordCount 产生多少个 RDD

也就是说 textFile 产生 2个 RDD分别是 HadoopRDD 和 MapPartitionsRDD

flatMap ()

Spark WordCount 产生多少个 RDD

flatMap 产生了一个 RDD,MapPartitionsRDD

map()

Spark WordCount 产生多少个 RDD

map  产生了一个 RDD,MapPartitionsRDD


reduceByKey()

这里要注意啦,reduceByKey 虽然是一个 rdd 调用的,但 reduceByKey 这个方法不是 RDD 中的方法,我们可以在 RDD 中找到如下的一个隐式转换,当我们去调用reduceByKey 方法时,会发生隐式转换,隐式的 RDD 转化成了PairRDDFunctions这个类,reduceByKey 是 PairRDDFunctions 的方法


Spark WordCount 产生多少个 RDD

Spark WordCount 产生多少个 RDD

reduceByKey 产生了一个RDD,ShuffledRDD

saveAsTextFile()

其实,在执行saveAsTextFile之前,我们可以通过RDD提供的toDebugString看到这些个算子在调用的时候到底产生了多少个RDD

 scala> val rdd = sc.textFile("file:///home/hadoop/data/wordcount.txt").flatMap(_.split(",")).map((_,1)).reduceByKey(_+_)
 rdd: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[9] at reduceByKey at <console>:24
 
 scala> rdd.toDebugString
 res1: String =
 (2) ShuffledRDD[9] at reduceByKey at <console>:24 []
  +-(2) MapPartitionsRDD[8] at map at <console>:24 []
  | MapPartitionsRDD[7] at flatMap at <console>:24 []
  | file:///home/hadoop/data/wordcount.txt MapPartitionsRDD[6] at textFile at <console>:24 []
  | file:///home/hadoop/data/wordcount.txt HadoopRDD[5] at textFile at <console>:24 []

总结

我们可以看见在 Spark 的一个标准的 WordCount 中一共会产生 6 个 RDD,textFile()  会产生一个 HadoopRDD 和一个 MapPerPartitionRDD,flatMap() 方法会产生一个 MapPartitionsRDD,map()  方法会产生一个 MapPartitionsRDD ,reduceByKey() 方法会产生一个 ShuffledRDD,saveAsTextFile 会产生一个 MapPartitionsRDD,所以一共会产生 6 个 RDD。



以上是关于Spark WordCount 产生多少个 RDD的主要内容,如果未能解决你的问题,请参考以下文章

3天掌握Spark--RDD概念及WordCount案例

Spark Streaming源码解读之RDD生成全生命周期详解

spark 深入学习 05RDD编程之旅基础篇-01

Spark:WordCount 步骤

Spark任务提交与执行之RDD的创建转换及DAG构建

Spark任务提交与执行之RDD的创建转换及DAG构建