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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Spark算子篇 --Spark算子之combineByKey详解

發布時間:2025/3/8 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spark算子篇 --Spark算子之combineByKey详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一。概念

rdd.combineByKey(lambda x:"%d_" %x, lambda a,b:"%s@%s" %(a,b), lambda a,b:"%s$%s" %(a,b))
三個參數(都是函數)
第一個參數:給定一個初始值,用函數生成初始值。
第二個參數:combinbe聚合邏輯。
第三個參數:reduce端聚合邏輯。

二。代碼

from pyspark.conf import SparkConf from pyspark.context import SparkContext conf = SparkConf().setMaster("local").setAppName("CombineByKey") sc = SparkContext(conf = conf) rdd = sc.parallelize([("A",1),("B",2),("B",3),("B",4),("B",5),("C",1),("A",2)], 2) def f(index,items):print "partitionId:%d" %indexfor val in items:print valreturn items rdd.mapPartitionsWithIndex(f).count()combinerRDD = rdd.combineByKey(lambda x:"%d_" %x, lambda a,b:"%s@%s" %(a,b), lambda a,b:"%s$%s" %(a,b)) combinerRDD.foreach(p) groupByKeyRDD.foreach(p)sc.stop()

三。解釋

第一個函數作用于每一個組的第一個元素上,將其變為初始值

第二個函數:一開始a是初始值,b是分組內的元素值,比如A[1_],因為沒有b值所以不能調用combine函數,第二組因為函數內元素值是[2_,3]調用combine函數后為2_@3,以此類推

第三個函數:reduce端大聚合,把相同的key的數據拉取到一個節點上,然后分組。

?

四。結果

?五。拓展

1.用combinebykey實現groupbykey的邏輯

1.1 combinebykey的三個參數

第一個應該返回一個列表,初始值

第二個函數中的a依賴于第一個函數的返回值

第三個函數的a,b依賴于第二個函數的返回值

1.2 解釋:

?

1.3 代碼:

def mergeValue(list1,b):list1.append(b)return list1def mergeCombiners(list1,list2):list1.extend(list2)return list1groupByKeyRDD = rdd.combineByKey(lambda a:[a],mergeValue,mergeCombiners)

?

1.4結果

?

2.使用combineBykey把相同的key和對應的邏輯相加起來

代碼:

reduceByKeyRDD = rdd.combineByKey(lambda a:a,lambda a,b:a+b,lambda a,b:a+b)

結果:

?

持續更新中。。。。,歡迎大家關注我的公眾號LHWorld.

轉載于:https://www.cnblogs.com/LHWorldBlog/p/8215705.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Spark算子篇 --Spark算子之combineByKey详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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