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

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)論
主站蜘蛛池模板: 毛片免费在线视频 | 国产一区福利 | 国产 日韩 欧美 亚洲 | 91国内精品久久久久影院优播 | 欧美一二区视频 | 成人黄18免费视频 | 亚洲国产精品乱码在线观看97 | 欧美一区二区免费 | 四虎网站在线播放 | 热久久视久久精品18国产 | 亚洲视频中文字幕在线观看 | 老师在办公室被躁到白浆 | 精品久久久久久午夜 | 国产波多野结衣中文在线播放 | 亚洲国产成人精品区 | 97视频在线观看免费 | 香蕉视频网站免费观视频 | 国产精品精品国产一区二区 | 久青草免费视频 | 日本高清视频www夜色资源 | 一道本不卡免费视频 | 欧美美女一区 | 成人影院久久久久久影院 | 久久精品国产乱子伦多人 | 高清在线精品一区二区 | 天天操天天干天天爽 | 国产九九视频在线观看 | 四虎精品影院4hutv四虎 | 亚洲精品国产精品一区二区 | 亚洲一二区视频 | 九九热中文字幕 | 欧美一区二区影院 | 在线看日本a毛片 | 日韩a级黄色片 | 女人zzzooooxxxx | 涩爱tv| 91视频第一页 | 午夜国产精品久久久久 | 94久久国产乱子伦精品免费 | 九九视频在线观看视频6偷拍 | 欧美整片在线 |