Spark 算子:RDD Action -1

1.aggregate

def aggregate[U](zeroValue: U)(seqOp: (U, T) ? U, combOp: (U, U) ? U)(implicit arg0: ClassTag[U]): U
aggregate用于聚合 rdd 中的元素,首先使用sepOP 將rdd 中的元素 T 聚合成 U ,然后使用 comOP 將之前聚合后的U 聚合成U
**特別注意: sepOP 和comOP 都會(huì)使用初值 zeroValue, 且類型為U

 def setOP(a:Int ,b:Int): Int ={

    println("seqOP: "+ a +"\t"+b)
    math.min(a,b)
  }
  def comOP(a:Int ,b:Int): Int ={
   println("comOP: "+ b+ "\t"+a)
    a*b
  }
  def testAggregate(): Unit ={
    val z =sc.parallelize( List(1,2,3,4,5,6),2)
    println(z.aggregate(3)(setOP ,comOP))

  }

結(jié)果分析

  • 輸出結(jié)果 7
  • 首先 list 分為兩個(gè)分區(qū) 123, 456
  • 然后進(jìn)行 setOP 操作
  • 第一個(gè)分區(qū): 輸出 3,1 1,2 1,3
  • 第二個(gè)分區(qū): 輸出 3,4 3,5 3,6
  • 最后進(jìn)行 comOP 操作
  • 輸出 3 1
  •  4 3
    
  • 最后的值為: 3+ 1+ 3 =7

2.fold

def fold(zeroValue: T)(op: (T, T) ? T): T

fold是aggregate的簡(jiǎn)化,將aggregate中的seqOp和combOp使用同一個(gè)函數(shù)op。

  def testFold(): Unit ={
    val z= sc.parallelize(List(1,2,3,4),2)
    println(z.fold(1)(comOP))
  }

3.Lookup

用于(K,V) 類型的RDD,制定K ,返回所有對(duì)應(yīng)的V

  def testLookup(): Unit ={
    val z=sc.makeRDD(Array(("a",1),("a",2),("c",3)))
    println(z.lookup("a"))
  }

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容