Spark 算子

1. Value 型

(1) 輸入骆膝、輸出分區(qū) 一對(duì)一

  • map

      // 將數(shù)據(jù)逐個(gè)迭代,生成新的值或鍵值對(duì)
      val rdd1 = sc.parallelize(1 to 3, 3)
      
      rdd1.map(x => (x, 1))
    
  • flatMap

      // 合并每個(gè)分區(qū)中的元素致燥,生成一個(gè)新的集合
      val rdd1 = sc.parallelize(1 to 3, 3)
      
      rdd1.flatMap(x => x) // => Array( 1, 2, 3 )
    
  • mapPartitions

      // 將每個(gè)分區(qū)進(jìn)行一次map
      val rdd1 = spark.sparkContext.parallelize(1 to 9, 3)
      
      rdd1.mapPartitions{iter =>
        val list = ListBuffer[Int]()
      
        while(iter.hasNext){
          val item = iter.next()
          list.append(item * 2)
        }
      
        list.toIterator // 返回迭代器
      }.collect().foreach(println)
    
  • glom

      // 分區(qū) => 數(shù)組
      val rdd1 = sc.parallelize(1 to 3, 3)
      
      rdd1.glom.collect // => Array( Array(1), Array(2), Array(3) )
    

(2) 輸入莲祸、輸出分區(qū) 多對(duì)一

  • union:并集(不去重)

      // 合并多個(gè) RDD
      rdd1.union(rdd2) // rdd1 + rdd2
    
  • intersection:交集(去重)

      rdd1.intersection(rdd2) // rdd1 * rdd2
    
  • subtract:差集

      rdd1.subtract(rdd2) // rdd1 - rdd2
    
  • cartesian:笛卡爾積

      // 對(duì) RDD 進(jìn)行笛卡爾積計(jì)算
      
      rdd1.cartesian(rdd2)
    

(3) 輸入酪穿、輸出分區(qū) 多對(duì)多

  • groupBy

      // 分組
      
      val rdd1 = sc.parallelize(1 to 9, 3)
      
      rdd1.groupBy(x => {
        if(x % 2 == 0)
            "偶數(shù)"
        else
            "奇數(shù)"
      })
    

(4) 輸出為輸入的子集

  • filter

      // 按一定條件過濾數(shù)據(jù)
      
      val rdd1 = sc.parallelize(1 to 9, 3)
      
      rdd1.filter(x => x % 2 == 0)
    
  • distinct

      // 去重
      
      rdd1.distinct
    
  • sample

      // 采樣
      val rdd1 = sc.parallelize(1 to 100000, 3)
      
      /**
       *    參數(shù)
       *    (1) withReplacement: Boolean    是否有放回采樣
       *    (2) fraction: Double                    采樣比例
       *    (3) seed: Long                              種子
       */
      rdd1.sample(false, 0.1, 0L)
    
  • takeSample

      // takeSample 與 sample 不同的是:不使用相對(duì)比例采樣族淮,而是按設(shè)定的個(gè)數(shù)進(jìn)行采樣
      rdd1.takeSample(true, 20, 0L)
    
  • Cache型
    • cache
    • persist

2. Key-Value 型

(1) 輸入辫红、輸出分區(qū)一對(duì)一

  • mapValues

      // 對(duì) value 進(jìn)行操作
      
      val rdd1 = sc.parallelize(List("dog","cat","tiger","lion","mouse"), 2)
      val rdd2 = rdd1.map(x => (x.length, x)) // Array( (3, dog), (3, cat), ... )
      
      rdd2.mapValues(x => "#" + x + "#") // Array( (3, #dog#), (3, #cat#), ... )
      // 只有一個(gè)參數(shù)時(shí),可以使用通配符 "_"
      rdd2.mapValues("#" + _ + "#")
    
  • zip

      // 合并兩個(gè) RDD 為鍵值對(duì)
      // 注意分區(qū)數(shù)祝辣、元素?cái)?shù)量 必須相同
      
      val rdd1 = sc.parallelize(List("dog","cat","tiger","lion","mouse"), 2)
      val rdd2 = sc.parallelize(List(1,1,2,3,3), 2)
      val rdd3 = rdd2.zip(rdd1)
      
      // Array((1,dog), (1,cat), (2,tiger), (3,lion), (3,mouse))
    

(2) 對(duì)單個(gè) RDD 聚集

  • combineByKey

      val rdd1 = sc.parallelize(List("dog","cat","tiger","lion","mouse"), 2)
      val rdd2 = sc.parallelize(List(1,1,2,3,3), 2)
      val rdd3 = rdd2.zip(rdd1) // Array((1,dog), (1,cat), (2,tiger), (3,lion), (3,mouse))
      
      // 根據(jù) Key 合并
      val rdd4 = rdd3.combineByKey(
                  List(_),    // createCombiner
                  (x: List[String], y: String) => y::x,   // mergeValue
                  (x: List[String], y: List[String]) => x:::y // mergeCombiners
          )
      
      // Array((3,List(rabbit, cat)), (5,List(bee)), (2,List(dog, bear)))
    
  • reduceByKey

      val rdd1 = sc.parallelize(List("dog","cat","tiger","dog","mouse"), 2)
      val rdd2 = sc.parallelize(List(1,1,2,3,3), 2)
      val rdd3 = rdd1.zip(rdd2) // Array((dog,1), (cat,1), (tiger,2), (dog,3), (mouse,3))
      
      // 根據(jù) Key 相減
      val rdd4 = rdd3.reduceByKey(_+_)
      
      // Array((dog,4), (cat,1), (tiger,2), (mouse,3))
    
  • partitionByKey

(3) 對(duì)兩個(gè) RDD 聚集

  • Cogroup

  • 連接

    • join
    • leftOutJoin
    • rightOutJoin

3. Action 算子

  • 無返回值
    • foreach
  • HDFS 輸出
    • saveAsTextFile
    • saveAsObjectFile
  • 集合贴妻、數(shù)據(jù)類型
    • collect
    • collectAsMap
    • reduceByKeyLocally
    • lookup
    • count
    • top
    • reduce
    • fold
    • aggregate

4. 數(shù)據(jù)加載算子

  • 文件讀取
    • textFile
  • 內(nèi)存生成
    • makeRDD
    • parallelize
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蝙斜,隨后出現(xiàn)的幾起案子名惩,更是在濱河造成了極大的恐慌,老刑警劉巖孕荠,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绢片,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡岛琼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門巢株,熙熙樓的掌柜王于貴愁眉苦臉地迎上來槐瑞,“玉大人,你說我怎么就攤上這事阁苞±ч荩” “怎么了祠挫?”我有些...
    開封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)悼沿。 經(jīng)常有香客問我等舔,道長(zhǎng),這世上最難降的妖魔是什么糟趾? 我笑而不...
    開封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任慌植,我火速辦了婚禮,結(jié)果婚禮上义郑,老公的妹妹穿的比我還像新娘蝶柿。我一直安慰自己,他們只是感情好非驮,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開白布交汤。 她就那樣靜靜地躺著,像睡著了一般劫笙。 火紅的嫁衣襯著肌膚如雪芙扎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天填大,我揣著相機(jī)與錄音戒洼,去河邊找鬼。 笑死栋盹,一個(gè)胖子當(dāng)著我的面吹牛施逾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播例获,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼汉额,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了榨汤?” 一聲冷哼從身側(cè)響起蠕搜,我...
    開封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎收壕,沒想到半個(gè)月后妓灌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蜜宪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年虫埂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片圃验。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡掉伏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情斧散,我是刑警寧澤供常,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站鸡捐,受9級(jí)特大地震影響栈暇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜箍镜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一源祈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鹿寨,春花似錦新博、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至馏慨,卻和暖如春埂淮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背写隶。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工倔撞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人慕趴。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓痪蝇,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親冕房。 傳聞我的和親對(duì)象是個(gè)殘疾皇子躏啰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容