日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Spark _06_补充部分算子【一】

發布時間:2024/2/28 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spark _06_补充部分算子【一】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

transformation

  • join,leftOuterJoin,rightOuterJoin,fullOuterJoin

作用在K,V格式的RDD上。根據K進行連接,對(K,V)join(K,W)返回(K,(V,W))

  • join后的分區數與父RDD分區數多的那一個相同。
  • union

合并兩個數據集。兩個數據集的類型要一致。

  • 返回新的RDD的分區數是合并RDD分區數的總和。
  • intersection

取兩個數據集的交集,返回新的RDD與父RDD分區多的一致

  • subtract

取兩個數據集的差集,結果RDD的分區數與subtract前面的RDD的分區數一致。

  • mapPartitions

與map類似,遍歷的單位是每個partition上的數據。

  • distinct(map+reduceByKey+map)
  • cogroup

當調用類型(K,V)和(K,W)的數據上時,返回一個數據集(K,(Iterable<V>,Iterable<W>)),子RDD的分區與父RDD多的一致。

action

  • foreachPartition

遍歷的數據是每個partition的數據。

?Scala API

package ddd.henu.transformationsimport org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext}object ElseFun {def main(args: Array[String]): Unit = {val conf = new SparkConf().setAppName("test").setMaster("local")val sc = new SparkContext(conf)sc.setLogLevel("error")/*val nameRDD: RDD[(String, Int)] = sc.parallelize(List[(String, Int)](("george", 22), ("honey", 19), ("kk", 20),("MM",18)))*///第二個參數numSlices 分區 RDD.getNumPartitionsval nameRDD: RDD[(String, Int)] = sc.parallelize(List[(String, Int)](("george", 22), ("honey", 19), ("kk", 20),("MM",18)),4)val scoreRDD: RDD[(String, Int)] = sc.parallelize(List[(String, Int)](("george", 100), ("honey", 200), ("kk", 300),("ll",400)),4)//join // val result: RDD[(String, (Int, Int))] = nameRDD.join(scoreRDD)/**結果* (george,(22,100))* (kk,(20,300))* (honey,(19,200))*///leftOuterJoin 按最大的分區/*val result: RDD[(String, (Int, Option[Int]))] = nameRDD.leftOuterJoin(scoreRDD)result.foreach(one =>{val name = one._1val v1 = one._2._1//無值的賦值10000val v2 = one._2._2.getOrElse("10000")println(s"name = $name,v1 = $v1,v2 = $v2")})*//**結果* name = george,v1 = 22,v2 = 100* name = kk,v1 = 20,v2 = 300* name = honey,v1 = 19,v2 = 200* name = MM,v1 = 18,v2 = 10000*//**結果* (george,(22,Some(100)))* (kk,(20,Some(300)))* (honey,(19,Some(200)))* (MM,(18,None))*///rightOuterJoin // val result: RDD[(String, (Option[Int], Int))] = nameRDD.rightOuterJoin(scoreRDD)/*** (ll,(None,400))* (george,(Some(22),100))* (kk,(Some(20),300))* (honey,(Some(19),200))*///fullOuterJoin // val result: RDD[(String, (Option[Int], Option[Int]))] = nameRDD.fullOuterJoin(scoreRDD)/*** (ll,(None,Some(400)))* (george,(Some(22),Some(100)))* (kk,(Some(20),Some(300)))* (honey,(Some(19),Some(200)))* (MM,(Some(18),None))*///union(合并) 8 個分區 4+4val result: RDD[(String, Int)] = nameRDD.union(scoreRDD)/*** (george,22)* (honey,19)* (kk,20)* (MM,18)* (george,100)* (honey,200)* (kk,300)* (ll,400)*/result.foreach(println)} }

?

總結

以上是生活随笔為你收集整理的Spark _06_补充部分算子【一】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。