1. 程式人生 > >RDD中的轉換和action(二)PairRDD操作

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轉換actionPairRDD操作

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頁面,

通過了解ServletHttp之間的關係,瞭解webhttp通訊使用

注:圖片如果損壞,點選文章連結:https://www.toutiao.com/i6512399401825075719/ 上一節,簡單理解“請求服務”的內容:http協議中的請求,接下來我們再看下http協議中的響應 http協議中的響應 Http響應和Http請求一樣,也是有響應的格式 &

java學習碰到的疑惑解答

  沒有寫完,未完待續......   路徑問題是一個在平時學習和開發碰到的常見問題,對於初學者是一個比較值得研究的東西。因此對路徑問題進行總結。 編寫路徑為了告訴編譯器如何找到其他資源. 路徑分類: 相對路徑:從當前資源出發尋找其他資源的過程。 例如,在

iOS執行緒Call Stack的捕獲解析

1. 部分參考資料 做這一塊時也是查閱了很多連結和書籍,包括但不限於: 以及很多Google Search。 2. 相關API和資料結構 由於我們在上面回溯執行緒呼叫棧拿到的是一組地址,所以這裡進行符號化的輸入輸出應該分別是地址和符號,介面設

Golang 奇葩的時間包之Json與struct物件之間互相轉換,JsonDateJsonTime自定義型別如何實現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_layercostmap更新的方法模型

         隔了一段時間回頭再看costmap的更新,結合自己使用gridmap的經歷,發現costmap中那麼多程式碼無非是做2件事情,一是限定感測器探測掃描過的區域大小和邊界(即後續要更新的區域),二是根據感測器模型和貝葉斯方法計算上述區域中所有柵格的更新後的被佔據

pythonxrangerange

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類都有用到回調

多線程編程學習筆記——asyncawait

處理 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-LinuxDNS詳解

相關 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

GoroutinesChannels

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&