【Spark學習】初步瞭解RDD中的裝飾者模式

Spark RDD是什麼?

RDD(resilient Distributed Dataset)彈性分佈式數據集,是spark中基本的計算(數據)抽象。它代表一個不可變,可分區,裏面的元素可以並行(多個線程一起執行)計算的集合

裝飾者模式是什麼?

裝飾者模式是設計模式其中的一種,是指在不改變原有對象的基礎之上,將功能附加到對象上。提供了比繼承更有彈性的替代方案(擴展原有對象功能)。簡單來說,就是給對象添加一個功能,但並沒有改變原有對象

RDD如何體現裝飾者模式?

1.先用一段簡單wordcount代碼來引出RDD是如何體現裝飾者模式

    //需要統計列表中每個單詞出現的個數
    //創建一個列表
    val list = List("hnswxy is very good","hello scala","hello java")

    //創建SparkConf對象
    val conf:SparkConf = new SparkConf().setMaster("local[*]").setAppName("wordCount01")

    //創建Spark上下文對象,並將conf傳入
    val sc = new SparkContext(conf)

    //從集合中創建RDD,並將集合傳入
    val rdd:RDD[String] = sc.makeRDD(list)
    
    //將rdd對象進行扁平化操作,取出list中的每個元素
    val rdd1:RDD[String] = rdd.flatMap(_.split(" "))

    //將rdd1對象進行map操作,將字符串中每個單詞轉換爲k-v形式,v爲 1
    val rdd2:RDD[(String,Int)] = rdd1.map(_ -> 1)

    //將rdd2對象進行reduceByKey操作,將相同key值的value聚合
    val rdd3:RDD[(String,Int)] = rdd2.reduceByKey(_+_)

    //將最終結果打印
    rdd3.collect().foreach(println)

運行結果

(scala,1)
(hnswxy,1)
(is,1)
(very,1)
(hello,2)
(java,1)
(good,1)

3.算子
①算子(operate):從認知心理學的角度看,解決問題其實是將問題的初始狀態,通過一系列操作(算子)問題的狀態進行轉換,然後達到完成(解決)狀態
②spark中所有的RDD方法都可以稱之爲算子,算子分爲兩大類:轉換算子 行動算子
③由一個RDD轉換到另一個RDD,可以通過豐富的算子實現,不再像MapReduce那樣只能寫map和redeuce了

3.可以從上述代碼中看出:
先利用列表創建了一個RDD對象,然後不斷的利用算子將RDD轉換成另一個RDD,也就是將RDD裝飾成另外一個RDD,原有的RDD並沒有改變,這種RDD的轉換就體現了裝飾者模式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章