日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

spark将rdd转为string_大数据技术之SparkCore(三)RDD依赖关系

發(fā)布時(shí)間:2025/3/20 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spark将rdd转为string_大数据技术之SparkCore(三)RDD依赖关系 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2.6.1 Lineage

RDD只支持粗粒度轉(zhuǎn)換,即在大量記錄上執(zhí)行的單個(gè)操作。將創(chuàng)建RDD的一系列Lineage(血統(tǒng))記錄下來(lái),以便恢復(fù)丟失的分區(qū)。RDD的Lineage會(huì)記錄RDD的元數(shù)據(jù)信息和轉(zhuǎn)換行為,當(dāng)該RDD的部分分區(qū)數(shù)據(jù)丟失時(shí),它可以根據(jù)這些信息來(lái)重新運(yùn)算和恢復(fù)丟失的數(shù)據(jù)分區(qū)。

(1)讀取一個(gè)HDFS文件并將其中內(nèi)容映射成一個(gè)個(gè)元組

scala> val wordAndOne = sc.textFile("/fruit.tsv").flatMap(_.split("")).map((_,1))

wordAndOne: org.apache.spark.rdd.RDD[(String, Int)] = MapPartitionsRDD[22] at map at :24

(2)統(tǒng)計(jì)每一種key對(duì)應(yīng)的個(gè)數(shù)

scala> val wordAndCount = wordAndOne.reduceByKey(_+_)

wordAndCount: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[23] at reduceByKey at :26

(3)查看“wordAndOne”的Lineage。通過(guò)toDebugString函數(shù):會(huì)發(fā)現(xiàn)從下往上,依次經(jīng)歷了HadoopRDD—MapPartitionsRDD—flatMap—map幾個(gè)過(guò)程

scala> wordAndOne.toDebugString

res5: String =

(2) MapPartitionsRDD[22] at map at :24 []

| MapPartitionsRDD[21] at flatMap at :24 []

| /fruit.tsv MapPartitionsRDD[20] at textFile at :24 []

| /fruit.tsv HadoopRDD[19] at textFile at :24 []

(4)查看“wordAndCount”的Lineage。在上面基礎(chǔ)上又經(jīng)歷了reduceByKey,且已顯明是一個(gè)ShuffledRDD

scala> wordAndCount.toDebugString

res6: String =

(2) ShuffledRDD[23] at reduceByKey at :26 []

+-(2) MapPartitionsRDD[22] at map at :24 []

| MapPartitionsRDD[21] at flatMap at :24 []

| /fruit.tsv MapPartitionsRDD[20] at textFile at :24 []

| /fruit.tsv HadoopRDD[19] at textFile at :24 []

(5)查看“wordAndOne”的依賴類型。通過(guò)dependencies函數(shù),顯示出是OneToOneDependency,即窄依賴:

scala> wordAndOne.dependencies

res7: Seq[org.apache.spark.Dependency[_]] = List(org.apache.spark.OneToOneDependency@5d5db92b)

(6)查看“wordAndCount”的依賴類型。通過(guò)dependencies函數(shù),顯示出是ShuffleDependency,即寬依賴:

scala> wordAndCount.dependencies

res8: Seq[org.apache.spark.Dependency[_]] = List(org.apache.spark.ShuffleDependency@63f3e6a8)

注意:RDD和它依賴的父RDD(s)的關(guān)系有兩種不同的類型,即窄依賴(narrow dependency)和寬依賴(wide dependency)。

2.6.2 窄依賴

窄依賴指的是每一個(gè)父RDD的Partition最多被子RDD的一個(gè)Partition使用,窄依賴我們形象的比喻為獨(dú)生子女(父RDD的一個(gè)分區(qū)只被一個(gè)子RDD使用)

2.6.3 寬依賴

寬依賴指的是多個(gè)子RDD的Partition會(huì)依賴同一個(gè)父RDD的Partition,會(huì)引起shuffle,總結(jié):寬依賴我們形象的比喻為超生(父RDD的各個(gè)分區(qū)都被子RDD使用)

2.6.4 DAG

DAG(Directed Acyclic Graph)叫做有向無(wú)環(huán)圖,原始的RDD通過(guò)一系列的轉(zhuǎn)換就就形成了DAG,根據(jù)RDD之間的依賴關(guān)系的不同將DAG劃分成不同的Stage,對(duì)于窄依賴,partition的轉(zhuǎn)換處理在Stage中完成計(jì)算。對(duì)于寬依賴,由于有Shuffle的存在,只能在parent RDD處理完成后,才能開始接下來(lái)的計(jì)算,因此寬依賴是劃分Stage的依據(jù)

2.6.5 任務(wù)劃分(面試重點(diǎn))

RDD任務(wù)切分中間分為:Application、Job、Stage和Task

1)Application:初始化一個(gè)SparkContext即生成一個(gè)Application

2)Job:一個(gè)Action算子就會(huì)生成一個(gè)Job

3)Stage:根據(jù)RDD之間的依賴關(guān)系的不同將Job劃分成不同的Stage,遇到一個(gè)寬依賴則劃分一個(gè)Stage。

4)Task:Stage是一個(gè)TaskSet,將Stage劃分的結(jié)果發(fā)送到不同的Executor執(zhí)行即為一個(gè)Task。(Stage中有多個(gè)分區(qū),一個(gè)分區(qū)就是一個(gè)任務(wù),即taskSet,這些tasks又會(huì)被分配到不同Executor中取執(zhí)行)

注意:Application->Job->Stage-> Task每一層都是1對(duì)n的關(guān)系。

(本文為系列文章,關(guān)注作者閱讀其它部分內(nèi)容,總有一篇是你欠缺的,技術(shù)無(wú)止境,且學(xué)且珍惜!!!)

總結(jié)

以上是生活随笔為你收集整理的spark将rdd转为string_大数据技术之SparkCore(三)RDD依赖关系的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。