1. 程式人生 > >《深入理解Spark》之 reduceByKey

《深入理解Spark》之 reduceByKey

 XML Code 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

package com.lyzx.day16

import org.apache.spark.{SparkContext, SparkConf}

class T2 {

  /

**
   * reduceByKey  = groupByKey + reduce
   *從功能上講相當於先做GroupByKey然後再做reduce操作但是比groupByKey+reduce操作效率要高
   * 即對於鍵值對的RDD來說,應用於所有的key相同的值做操作
   *
   * 由於reduceByKey是先做groupByKey後做reduce
   * 所以它包含shuffle操作(groupByKey包含shuffle操作)
   *前面說過
   *   功能上:reduceByKey  = groupByKey + reduce
   *   效率上:reduceByKey  >
 groupByKey + reduce
   * 原因是reduceByKey在map端自帶Combiner
   * 例如wordCount例子中map端
   *  [("java",(1,1,1,1)),("c",(1,1,1,1))]
   *  如果在map做Combiner就像[("java",(4)),("c",(4))]
   *  在reduce端fatch時效率會高
   */
  def f1(sc:SparkContext): Unit ={
    val arr = List(1,2,3,4,5,5,4,3,2,1)

    //
rdd中的資料如下[(1,2,3,4,5,5,4,3,2,1)]
    val rdd = sc.parallelize(arr)
    //mapRdd中的資料如下[((1,1),(2,2),(3,3),...(5,5),....,(1,1))]
    val mapRdd = rdd.map(item=>(item,item*10))
    val reduceRdd = mapRdd.reduceByKey(_+_)
    reduceRdd.foreach(println)
  }
}

object T2{
  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("myTest").setMaster("local")
    val sc = new SparkContext(conf)

    val t = new T2()
    t.f1(sc)
    sc.stop()
  }
}

相關推薦

深入理解SparkListenerBus監聽器

ListenerBus對消費佇列的實現 上圖為LiveListenerBus類的申明 self => 這句相當於給this起了一個別名為self LiveListenerBus負責將SparkListenerEvents非同步傳送過已經註冊過的S

深入理解Spark reduceByKey

 XML Code  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

深入理解Spark通過自定義分割槽器解決資料傾斜問題

package com.lyzx.day37 import org.apache.spark.{Partitioner, SparkConf, SparkContext} class D1 { //partitionBy和自定義分割槽器解決資料傾斜的問題 def

深入理解Spark運算元詳解

 XML Code  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

深入理解Sparkspark Streaming概念的再理解

1、spark Streaming是一個微批處理的框架 2、批處理時間間隔 batchInterval       >> 表示在batchInterval時間內Spark 所接收的資料被當做一個批次做處理 3、批處理時間間隔(batchInterval)、視窗長

深入理解Spark 結構化流(spark streaming+spark SQL 處理結構化資料)的一個demo

最近在做關於spark Streaming + spark sql 結合處理結構化的資料的業務,下面是一個小栗子,有需要的拿走! ​ package com.unistack.tamboo.compute.process.impl; import com.alibaba.

深入理解SparkRDD和DataFrame的相互轉換

package com.lyzx.day18 import org.apache.spark.sql.SQLContext import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.s

深入理解SparkSpark常用運算元詳解(java版+spark1.6.1)

最近公司要用Java開發Spark專案,以前用的是Scala語言,今天就把Spark常用的運算元使用java語言實現了一遍 XML Code  1 2 3 4 5 6 7 8 9 10 11 12

深入理解SparkSpark-Stream概述1(官方文件翻譯版)

最近在學英語,學以致用,就嘗試著看Spark的官方文件,並試著翻譯了部分,由於水平有限如果有所疏漏的地方歡迎指正 * Spark Stream Overview * Spark Streaming

深入理解SparkSpark與Kafka整合原理

spark和kafka整合有2中方式 1、receiver 顧名思義:就是有一個執行緒負責獲取資料,這個執行緒叫receiver執行緒 解釋: 1、Spark叢集中的某個executor中有一個receiver執行緒,這個執行緒負責從kafka中獲取資料  注意

深入理解Spark通過sample運算元找出導致資料傾斜的key

最近在整理原來學過的內容,看到sample運算元就寫一篇在實際開發中sample運算元的具體應用 sample(withReplacement : scala.Boolean, fraction : scala.Double,seed scala.Long) sample

深入理解SparkRDD轉換DataFrame的兩種方式的比較

package com.lyzx.day19 import org.apache.spark.sql.types.{StringType, StructField, StructType} import org.apache.spark.{SparkConf, Spark

深入理解javascript設計模式

rip 是我 解決問題 不想 接受 button move center 常識 設計模式 設計模式是命名、抽象和識別對可重用的面向對象設計實用的的通用設計結構。設計模式確定類和他們的實體、他們的角色和協作、還有他們的責任分配。 每個設計模式都聚焦於一個面向對象的設計難題

深入理解javascript原型

undefine tor ace 對象實例 高級 code turn 三方 true 理解原型 原型是一個對象。其它對象能夠通過它實現屬性繼承。不論什麽一個對象都能夠成為繼承,全部對象在默認的情況下都有一個原型。由於原型本身也是對象,所以每一個原型自身又有一個原型

深入理解Java線程池

我們 先進先出 tor cor null 討論 等於 影響 log 重要連接:http://www.cnblogs.com/dolphin0520/p/3958019.html 出處:http://www.cnblogs.com/dolphin0520/     本文歸作者

深入理解JVMJVM內存區域與內存分配

錯誤 銷毀 構造方法 初學 不存在 data 空閑 table fin 深入理解JVM之JVM內存區域與內存分配   在學習jvm的內存分配的時候,看到的這篇博客,該博客對jvm的內存分配總結的很好,同時也利用jvm的內存模型解釋了java程序中有關參數傳遞的問題。  

深入理解SpringCloudEureka註冊過程分析

.net then media inject seq tar view inf cas   eureka是一種去中心化的服務治理應用,其顯著特點是既可以作為服務端又可以作為服務向自己配置的地址進行註冊。那麽這篇文章就來探討一下eureka的註冊流程。 一、Eureka的服

深入理解系列 float

子元素 out oat 理解 oom 20px 布局 空格 ble float的設計初衷: 僅僅是為了實現文字環繞效果 float的感性認知: 包裹性: 收縮:元素應用了float後,寬度收縮,緊緊地包裹住內容(即元素的寬度收縮到元素內的內容的寬度大小 堅挺:原來沒有高

深入理解python二——python列表和元組

n) 數據 兩種 性能 執行 效率 動態 單元 這一 從一開始學習python的時候,很多人就聽到的是元組和列表差不多,區別就是元組不可以改變,列表可以改變。 從數據結構來說,這兩者都應當屬於數組,元組屬於靜態的數組,而列表屬於動態數組。稍後再內存的分配上也會體現這一點。對

深入理解spark-taskScheduler,schedulerBackend源碼分析

cluster create for available 常用 scala ini div row 上次分析了dagshceduler是如何將任務拆分成job,stage,task的,但是拆分後的僅僅是一個邏輯結果,保存為一個resultstage對象,並沒執行;