RDD中的轉換和action(二)PairRDD操作
package RDD import org.apache.spark.{SparkConf, SparkContext} /** * Created by legotime on 2016/5/5. */ object pairRDD { def myfunc1(index: Int, iter: Iterator[(String)]) : Iterator[String] = { iter.toList.map(x => "[partID:" + index + ", val: " + x + "]").iterator } def myfunc2(index:Int,iter:Iterator[(Int,String)]):Iterator[String]={ iter.toList.map(x => "[partID:" + index + ", val: " + x + "]").iterator } def main(args: Array[String]) { val conf = new SparkConf().setAppName("pair RDD").setMaster("local") val sc = new SparkContext(conf) val SingleRDD = sc.parallelize(List("scala","python","java","Spark","hadoop"),2) SingleRDD.mapPartitionsWithIndex(myfunc1).collect.foreach(println) //[partID:0, val: scala] //[partID:0, val: python] //[partID:1, val: java] //[partID:1, val: Spark] //[partID:1, val: hadoop] //-----------------------------單個pairRDD-------------------------------------val pairRDD = SingleRDD.map(x => (x.length,x)) pairRDD.mapPartitionsWithIndex(myfunc2).collect.foreach(println) //[partID:0, val: (5,scala)] //[partID:0, val: (6,python)] //[partID:1, val: (4,java)] //[partID:1, val: (5,Spark)] //[partID:1, val: (6,hadoop)] //合併具有相同鍵(key)的值 pairRDD.reduceByKey(_+_).collect().foreach(println) //先本地partition相同的key聚合,之後再partition和partition結合 //(4,java) //(6,pythonhadoop) //(5,scalaSpark) //對具有相同鍵的值進行分組 pairRDD.groupByKey().collect.foreach(println) //(4,CompactBuffer(java)) //(6,CompactBuffer(python, hadoop)) //(5,CompactBuffer(scala, Spark)) //對key中的每個值應用一個函式 pairRDD.mapValues(x=>"I am "+x).collect.foreach(println) //(5,I am scala) //(6,I am python) //(4,I am java) //(5,I am Spark) //(6,I am hadoop) pairRDD.flatMapValues(x=>"I am "+x).collect.foreach(print) //(5,I)(5, )(5,a)(5,m)(5, )(5,s)(5,c)(5,a)(5,l)(5,a)(6,I)(6, )(6,a)(6,m)(6, )(6,p)(6,y)(6,t)(6,h)(6,o)(6,n)(4,I)(4, )(4,a)(4,m)(4, )(4,j)(4,a)(4,v)(4,a)(5,I)(5, )(5,a)(5,m)(5, )(5,S)(5,p)(5,a)(5,r)(5,k)(6,I)(6, )(6,a)(6,m)(6, )(6,h)(6,a)(6,d)(6,o)(6,o)(6,p)16/05/05 22:27:52 INFO SparkContext: Starting job: collect at pairRDD.scala:55 pairRDD.keys.collect.foreach(println) pairRDD.values.collect.foreach(println) pairRDD.sortByKey().collect.foreach(println) //(4,java) //(5,scala) //(5,Spark) //(6,python) //(6,hadoop) //-----------------------------兩個pairRDD------------------------------------- val tempPairRDD = sc.parallelize(List((5,"flink"))) tempPairRDD.collect.foreach(println) pairRDD.subtract(tempPairRDD).mapPartitionsWithIndex(myfunc2).collect.foreach(println) pairRDD.join(tempPairRDD).collect.foreach(println) //確保tempPairRDD第一個鍵存在(左連線) pairRDD.leftOuterJoin(tempPairRDD).collect.foreach(println) //(4,(java,None)) //(6,(python,None)) //(6,(hadoop,None)) //(5,(scala,Some(flink))) //(5,(Spark,Some(flink))) //確保PairRDD第一個鍵存在(右連線) pairRDD.rightOuterJoin(tempPairRDD).collect.foreach(println) //(4,(CompactBuffer(java),CompactBuffer())) //(6,(CompactBuffer(python, hadoop),CompactBuffer())) //(5,(CompactBuffer(scala, Spark),CompactBuffer(flink))) pairRDD.cogroup(tempPairRDD).collect.foreach(println) //(4,(CompactBuffer(java),CompactBuffer())) //(6,(CompactBuffer(python, hadoop),CompactBuffer())) //(5,(CompactBuffer(scala, Spark),CompactBuffer(flink))) //==============================pairRDD的行動操作=================================== val ActionRDD = sc.parallelize(List((1,2),(3,4),(5,6),(1,6)),2) ActionRDD.countByValue.foreach(println) //((1,2),1) //((5,6),1) //((1,6),1) //((3,4),1) ActionRDD.countByKey.foreach(println) //(1,2) //(3,1) //(5,1) ActionRDD.collectAsMap().foreach(println) //(5,6) //(1,6) //(3,4) ActionRDD.lookup(1).foreach(println) //2 //6 }
}
//更多操作參考:http://homepage.cs.latrobe.edu.au/zhe/ZhenHeSparkRDDAPIExamples.html
相關推薦
RDD中的轉換和action(二)PairRDD操作
package RDD import org.apache.spark.{SparkConf, SparkContext} /** * Created by legotime on 2016/5/5. */ object pairRDD { def myfu
PHP 和 ajax(二),操作xml
php使用ajax來讀取xml檔案。該功能設計到四個檔案:html頁面,js頁面,php頁面、xml檔案。 一、現實的功能 在html中,通過選擇改變select元素,來讀取xml檔案中相應的內容,如下圖: 二、html頁面,
通過了解Servlet和Http之間的關係,瞭解web中http通訊使用(二)
注:圖片如果損壞,點選文章連結:https://www.toutiao.com/i6512399401825075719/ 上一節,簡單理解“請求服務”的內容:http協議中的請求,接下來我們再看下http協議中的響應 http協議中的響應 Http響應和Http請求一樣,也是有響應的格式 &
java學習中碰到的疑惑和解答(二)
沒有寫完,未完待續...... 路徑問題是一個在平時學習和開發碰到的常見問題,對於初學者是一個比較值得研究的東西。因此對路徑問題進行總結。 編寫路徑為了告訴編譯器如何找到其他資源. 路徑分類: 相對路徑:從當前資源出發尋找其他資源的過程。 例如,在
iOS中執行緒Call Stack的捕獲和解析(二)
1. 部分參考資料 做這一塊時也是查閱了很多連結和書籍,包括但不限於: 以及很多Google Search。 2. 相關API和資料結構 由於我們在上面回溯執行緒呼叫棧拿到的是一組地址,所以這裡進行符號化的輸入輸出應該分別是地址和符號,介面設
Golang 奇葩的時間包之Json與struct物件之間互相轉換,JsonDate和JsonTime自定義型別如何實現json編碼和解碼(二)
本篇在專案中實用性極強,推薦珍藏 package main import ( "encoding/json" "fmt" "time" ) type JsonDate time.Time type JsonTime time.Time func (
實現Action(二)——Action介面和ActionSupport基類
本文摘自:李剛 著 《輕量級 Java EE企業應用實戰 Struts2+Spring+hibernate整合開發》 續 實現Action(一) 為了讓使用者開發的Action類更加規範,Struts2提供了一個Action介面,這個介面定義了Strut
程式碼解析之range_sensor_layer中costmap更新的方法和模型(二)
隔了一段時間回頭再看costmap的更新,結合自己使用gridmap的經歷,發現costmap中那麼多程式碼無非是做2件事情,一是限定感測器探測掃描過的區域大小和邊界(即後續要更新的區域),二是根據感測器模型和貝葉斯方法計算上述區域中所有柵格的更新後的被佔據
python中xrange和range(轉)
log item .py 對象 nbsp net range all file 說到序列,我們第一想到的是一組有序元素組成的集合。同時,每個元素都有唯一的下標作為索引。 在Python中,有許多內界的序列。包括元組tuple,列表list,字符串str等。上面提到的序列
Ubuntu 16.04.2 LTS 安裝 jdk1.6 和 tomcat6 (二)
pass set 命令 arc 記錄 variable ogr ant pat 上一篇記錄和分享了jdk1.6 在Ubuntu 16.04.2 環境下的安裝配置,本文開始安裝和配置tomcat 6 2 安裝tomcat http://tomcat.ap
小白學習安全測試——httrack的安裝和使用(二)
type mas track base launch 驗證 解決方案 我沒 ted httrack是一款免費的網站鏡像程序,簡單理解就是可以在網站結構(網頁及一些主要信息文件),下載到本地,可離線瀏覽,我是按照搭建成功後的console直譯過來的 下面說下安裝: 我都是在L
UI自動化測試(二)瀏覽器操作及對元素的定位方法(xpath定位和css定位詳解)
cli 刷新 ota api enter 版本 ror apache 窗口 Selenium下的Webdriver工具支持FireFox(geckodriver)、 IE(InternetExplorerDriver)、Chrome(ChromeDriver)、 Opera
【Java入門提高篇】Day5 Java中的回調(二)
彈出對話框 java入門 也會 color 編程 args performed show clas Java中有很多個Timer,常用的有兩個Timer類,一個java.util包下的Timer,一個是javax.swing包下的Timer,兩個Timer類都有用到回調
多線程編程學習筆記——async和await(二)
處理 sync ext 操作 line cnblogs 編程 技術 容器 接上文 多線程編程學習筆記——async和await(一) 三、 對連續的異步任務使用await操作符 本示例學習如何閱讀有多個await方法方法時,程序
python中的數組(二)
print pre bsp 數組元素 如何 python clas 範圍 ber python如何取一定範圍的數組元素呢? 詳情看示例1--3 直接看代碼 1.分片 1 #取一定範圍的元素 2 lucky_number = [0,1,2,3,4,5,6] 3 #分片
05-Linux中DNS詳解(二)
相關 proc gen lin 四種方法 .... rate 我的網站 四種 接“04-Linux中DNS詳解(一)” 六、在Linux上測試域名解析1、先檢查DNS是否設置正確 cat /etc/resolv.conf [resolv.conf] # Generate
Zookeeper簡介和安裝(二)
cond AD 2.0 echo agreement log4 分布式鎖 express war 一、簡介: Zookeeper是一個分布式協調服務,提供的服務如下: 命名服務:類似於DNS,但僅對於節點 配置管理:服務配置信息的管理 集群管理:Dubbo使用Zookeep
Goroutines和Channels(二)
con -m abort 表示 時間格式 HA lis 新的 form 網絡編程是並發大顯身手的一個領域,由於服務器是最典型的需要同時處理很多連接的程序,這些連接一般來自於彼此獨立的客戶端。 本小節,我們會講解go語言的net包,這個包提供編寫一個網絡客戶端或者服務器程序
多態和抽象(二)
就是 target 名稱 沒有 span toolbar 調用 數位 public ①多態的特點是,類中有虛函數。抽象的特點是,類中有純虛函數。 ②多態的基類可以實例化對象,抽象類不可以實例化對象。如果一個抽象類的派生類沒有實現這個抽象類的純虛函數,那麽這個派生類也是個抽象
HTML常用元素和屬性(二)
類型 語言 javascrip load height mail rip bubuko name 4:使用a元素添加超鏈接和錨點 <href>指定超鏈接連接到另外一個資源 <hreflang>指定超鏈接所連接的文檔所使用的語言 <target&