首页 理论教育 深入探究RDD生成的内部机制

深入探究RDD生成的内部机制

时间:2023-06-29 理论教育 版权反馈
【摘要】:图2-18 通过HadoopRDD获取数据2.words=line.flatMap()此命令对于RDD采取transformation(转换)操作,作用在于将MapPartitionsRDD中的每一个记录进行以空格为标记的切分,并把每一个RDD的切分结果放在一个MapParti-tionRDD中。例如,变为6.sort_2=sort_1.sortByKey此命令对于RDD采取Action(动作)操作,作用在于将MapPartitionsRDD根据key进行排序,并生成shuffleRDD。

深入探究RDD生成的内部机制

本节基于上小节程序的调试结果,逐条分析调试语句。

1.line=sc.textFile()

本语句的作用在于从外部数据中读取数据,并生成MapPartitionsRDD。此处需要注意:如图2-18所示,可以看出该MapPartitionsRDD的依赖为HadoopRDD,从这里可以发现其实textFile()过程包含两个步骤,第一步将文件内容转化为HadoopRDD(key-value形式,key为行号),第二步将HadoopRDD转化为MapPartitionsRDD(value形式,将key-value类型的key删去)。

978-7-111-55442-4-Chapter02-59.jpg

图2-18 通过HadoopRDD获取数据

2.words=line.flatMap()

此命令对于RDD采取transformation(转换)操作,作用在于将MapPartitionsRDD中的每一个记录进行以空格为标记的切分,并把每一个RDD的切分结果放在一个MapParti-tionRDD中。

3.pairs=words.map(word=>(word,1))

此命令对于RDD采取Transformation(转换)操作,作用在于将MapPartitionsRDD中的每一个记录(如Spark(value类型))转换为key-value类型(如(spark,1)),便于下一步reduceByKey操作。

4.reduce=pairs.reduceByKey(_+_)

此命令对于RDD采取Action(动作)操作,作用在于通过Shuffle将pairs中所有的记录按照key相同value相加的规则进行处理,并把结果放到一个shuffleRDD中。例如,((spark,1),(spark,1))变成((spark,2))。

同时需要注意以下两点:首先本步骤实质上分为两个步骤,第一步为Local级别的Re-duce,对当前计算机所拥有的数据先进行Reduce操作,生成MapPartitionsRDD;第二步为Shuffle级别的Reduce,基于第一步的结果,对结果进行Shuffle-Reduce操作,生成最终的shuffleRDD。其次进行Action操作时,执行此操作之前的所有转换操作,所以调试过程中会出现此前的除textFile操作外的执行时间均非常短,说明RDD转换操作不直接进行运算。(www.xing528.com)

5.sort-1=reduce.map(pair=>(pair._2,pair._1))

此命令对于RDD采取Transformation(转换)操作,作用在于将shuffleRDD中的每一个记录的key和value互换,生成一个新的MapPartitionsRDD。例如,(spark,2)变为(2,spark)

6.sort_2=sort_1.sortByKey(false)

此命令对于RDD采取Action(动作)操作,作用在于将MapPartitionsRDD根据key进行排序,并生成shuffleRDD。

7.sort_3=sort_2.map(pair=>(pair._2,pair._1))

此命令对于RDD采取Transformation(转换)操作,作用在于将shuffleRDD中的每一个记录的key和value互换,生成一个新的MapPartitionsRDD。例如,(2,spark)变为(spark,2)。

8.filter=sort_3.filter(pair=>pair._2>2)

此命令对于RDD采取Transformation(转换)操作,作用在于根据value值筛选MapPar-titionsRDD中的数据,输出value大于2的记录。

9.打印输出

最后通过collect()方法将结果收集后,使用foreach()方法遍历数据并通过println()方法打印出所有数据。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈