亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Spark學(xué)習(xí)實(shí)例(Python):共享變量Shared Variables

系統(tǒng) 1617 0

通常在使用Spark算子函數(shù),比如使用map()或者reduce函數(shù)我們向函數(shù)傳入條件時(shí),函數(shù)內(nèi)部可以使用驅(qū)動(dòng)程序中定義的變量,但是這樣會(huì)使集群中所有任務(wù)都會(huì)得到變量新的副本,這些副本的更新不會(huì)傳播回驅(qū)動(dòng)程序,導(dǎo)致讀寫共享變量效率低下或者內(nèi)存溢出,為了解決這個(gè)問題Spark提供了兩種共享變量類型:廣播變量和累加器

  • 廣播變量:用來(lái)高效分發(fā)較大對(duì)象,只能在Driver定義,不能在Executor端定義,同時(shí)RDD不存儲(chǔ)數(shù)據(jù)所以不能廣播出去
  • 累加器:用來(lái)對(duì)信息進(jìn)行聚合,常用場(chǎng)景reduce()

不使用廣播變量,直接定義一個(gè)變量list,然后在filter()來(lái)判斷元素是否存在list中,實(shí)現(xiàn)代碼如下:

            
              from pyspark import SparkContext

if __name__ == '__main__':
    sc = SparkContext(appName="broadcast", master="local[*]")
    list = [2, 4, 6, 8]
    data = [1, 2, 3, 4, 5]
    rdd = sc.parallelize(data)
    print(rdd.filter(lambda x: list.__contains__(x)).collect())
    # [2, 4]
    sc.stop()
            
          

定義的list變量在驅(qū)動(dòng)端Driver創(chuàng)建的,但是要到Executor端運(yùn)行,Driver端會(huì)把list以task形式拷貝到Executor端,如果有很多task那么就會(huì)有很多l(xiāng)ist復(fù)制過(guò)去,這個(gè)list非常大的時(shí)候就會(huì)造成內(nèi)存溢出,關(guān)系圖如下所示:

Spark學(xué)習(xí)實(shí)例(Python):共享變量Shared Variables_第1張圖片

使用廣播變量,變量只會(huì)被發(fā)送到各節(jié)點(diǎn)一次,同時(shí)存放在Executor的BlockManager中,實(shí)現(xiàn)代碼如下:

            
              from pyspark import SparkContext

if __name__ == '__main__':
    sc = SparkContext(appName="broadcast", master="local[*]")
    list = [2, 4, 6, 8]
    bclist = sc.broadcast(list)
    data = [1, 2, 3]
    rdd = sc.parallelize(data)
    print(rdd.map(lambda x: bclist.value[x]).collect())
    # [4, 6, 8]
    sc.stop()
            
          

關(guān)系圖如下:

Spark學(xué)習(xí)實(shí)例(Python):共享變量Shared Variables_第2張圖片

累加器,對(duì)作業(yè)執(zhí)行過(guò)程事件進(jìn)行計(jì)數(shù),實(shí)現(xiàn)代碼如下:

            
              from pyspark import SparkContext

if __name__ == '__main__':
    sc = SparkContext(appName="broadcast", master="local[*]")
    data = [1, 2, 3]
    rdd = sc.parallelize(data)
    accumulator = sc.accumulator(0)
    rdd.map(lambda x: accumulator.add(1)).collect()
    print(accumulator.value)
    # 3
    sc.stop()
            
          

關(guān)系圖如下:

Spark學(xué)習(xí)實(shí)例(Python):共享變量Shared Variables_第3張圖片

累加器在Driver端定義賦初始值,在Executor端更新,最后在Driver端讀取最后的值。

?

Spark學(xué)習(xí)目錄:

  • Spark學(xué)習(xí)實(shí)例1(Python):?jiǎn)卧~統(tǒng)計(jì) Word Count
  • Spark學(xué)習(xí)實(shí)例2(Python):加載數(shù)據(jù)源Load Data Source
  • Spark學(xué)習(xí)實(shí)例3(Python):保存數(shù)據(jù)Save Data
  • Spark學(xué)習(xí)實(shí)例4(Python):RDD轉(zhuǎn)換 Transformations
  • Spark學(xué)習(xí)實(shí)例5(Python):RDD執(zhí)行 Actions
  • Spark學(xué)習(xí)實(shí)例6(Python):共享變量Shared Variables
  • Spark學(xué)習(xí)實(shí)例7(Python):RDD、DataFrame、DataSet相互轉(zhuǎn)換
  • Spark學(xué)習(xí)實(shí)例8(Python):輸入源實(shí)時(shí)處理 Input Sources Streaming
  • Spark學(xué)習(xí)實(shí)例9(Python):窗口操作 Window Operations

?

?

?


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 欧美国产成人精品一区二区三区 | 国内久久精品 | www.中文字幕.com | 精品在线免费播放 | 亚洲综合在线观看一区www | 免费看欧美日韩一区二区三区 | 在线播放亚洲精品富二代91 | 欧美猛操 | aⅴ免费视频 | 日本一级淫一片免费 | 亚洲女人天堂a在线播放 | 四虎最新网址在线观看 | 日韩免费高清一级毛片久久 | 成人a毛片视频免费看 | 欧美色欧美亚洲高清在线观看 | 国产成人精品久久一区二区三区 | 狠狠躁夜夜躁人人爽天天3 狠狠躁夜夜躁人人爽天天miya | 伊人中文字幕 | 一本色道久久综合亚洲精品高清 | 色资源在线 | 久久久久久亚洲精品 | 国产精品视频不卡 | 成人性色生活片免费网 | 玖玖国产在线观看 | 综合久久久久 | 看免费5xxaaa毛片30厘米 | 日韩欧美国产综合 | 九九视频国产免 | 亚洲黄色片视频 | 精品在线免费观看视频 | 91精品一区二区三区久久久久 | 久久久久成人精品一区二区 | 精品久久不卡 | 久久66热re国产毛片基地 | 啪啪99久久综合精品色 | 国产乱码精品一区二区三区卡 | 亚洲区一| 国产日韩一区二区三区 | 欧美性视频在线 | 91最新免费地址入口 | 国产一区二区精品久 |