【pyspark速成專家】4_Spark之RDD編程2

目錄

四,常用PairRDD的轉換操作

五,緩存操作


四,常用PairRDD的轉換操作

PairRDD指的是數據為長度為2的tuple類似(k,v)結構的數據類型的RDD,其每個數據的第一個元素被當做key,第二個元素被當做value.

reduceByKey

#reduceByKey對相同的key對應的values應用二元歸并操作
rdd = sc.parallelize([("hello",1),("world",2),("hello",3),("world",5)])
rdd.reduceByKey(lambda x,y:x+y).collect()[('hello', 4), ('world', 7)]

groupByKey

#groupByKey將相同的key對應的values收集成一個Iterator
rdd = sc.parallelize([("hello",1),("world",2),("hello",3),("world",5)])
rdd.groupByKey().collect()[('hello', <pyspark.resultiterable.ResultIterable at 0x119c6ae48>),('world', <pyspark.resultiterable.ResultIterable at 0x119c6a860>)]

sortByKey

#sortByKey按照key排序,可以指定是否降序
rdd = sc.parallelize([("hello",1),("world",2),("China",3),("Beijing",5)])
rdd.sortByKey(False).collect()[('world', 2), ('hello', 1), ('China', 3), ('Beijing', 5)]

join

#join相當于根據key進行內連接
age = sc.parallelize([("LiLei",18),("HanMeiMei",16),("Jim",20)])
gender = sc.parallelize([("LiLei","male"),("HanMeiMei","female"),("Lucy","female")])
age.join(gender).collect()[('LiLei', (18, 'male')), ('HanMeiMei', (16, 'female'))]

leftOuterJoin和rightOuterJoin

#leftOuterJoin相當于關系表的左連接age = sc.parallelize([("LiLei",18),("HanMeiMei",16)])
gender = sc.parallelize([("LiLei","male"),("HanMeiMei","female"),("Lucy","female")])
age.leftOuterJoin(gender).collect()[('LiLei', (18, 'male')), ('HanMeiMei', (16, 'female'))]#rightOuterJoin相當于關系表的右連接
age = sc.parallelize([("LiLei",18),("HanMeiMei",16),("Jim",20)])
gender = sc.parallelize([("LiLei","male"),("HanMeiMei","female")])
age.rightOuterJoin(gender).collect()[('LiLei', (18, 'male')), ('HanMeiMei', (16, 'female'))]

cogroup

#cogroup相當于對兩個輸入分別goupByKey然后再對結果進行groupByKeyx = sc.parallelize([("a",1),("b",2),("a",3)])
y = sc.parallelize([("a",2),("b",3),("b",5)])result = x.cogroup(y).collect()
print(result)
print(list(result[0][1][0]))[('a', (<pyspark.resultiterable.ResultIterable object at 0x119c6acc0>, <pyspark.resultiterable.ResultIterable object at 0x119c6aba8>)), ('b', (<pyspark.resultiterable.ResultIterable object at 0x119c6a978>, <pyspark.resultiterable.ResultIterable object at 0x119c6a940>))]
[1, 3]

subtractByKey

#subtractByKey去除x中那些key也在y中的元素x = sc.parallelize([("a",1),("b",2),("c",3)])
y = sc.parallelize([("a",2),("b",(1,2))])x.subtractByKey(y).collect()[('c', 3)]

foldByKey

#foldByKey的操作和reduceByKey類似,但是要提供一個初始值
x = sc.parallelize([("a",1),("b",2),("a",3),("b",5)],1)
x.foldByKey(1,lambda x,y:x*y).collect()[('a', 3), ('b', 10)]

五,緩存操作

如果一個rdd被多個任務用作中間量,那么對其進行cache緩存到內存中對加快計算會非常有幫助。

聲明對一個rdd進行cache后,該rdd不會被立即緩存,而是等到它第一次被計算出來時才進行緩存。

可以使用persist明確指定存儲級別,常用的存儲級別是MEMORY_ONLY和EMORY_AND_DISK。

如果一個RDD后面不再用到,可以用unpersist釋放緩存,unpersist是立即執行的。

緩存數據不會切斷血緣依賴關系,這是因為緩存數據某些分區所在的節點有可能會有故障,例如內存溢出或者節點損壞。

這時候可以根據血緣關系重新計算這個分區的數據。

#cache緩存到內存中,使用存儲級別 MEMORY_ONLY。
#MEMORY_ONLY意味著如果內存存儲不下,放棄存儲其余部分,需要時重新計算。
a = sc.parallelize(range(10000),5)
a.cache()
sum_a = a.reduce(lambda x,y:x+y)
cnt_a = a.count()
mean_a = sum_a/cnt_aprint(mean_a)#persist緩存到內存或磁盤中,默認使用存儲級別MEMORY_AND_DISK
#MEMORY_AND_DISK意味著如果內存存儲不下,其余部分存儲到磁盤中。
#persist可以指定其它存儲級別,cache相當于persist(MEMORY_ONLY)
from  pyspark.storagelevel import StorageLevel
a = sc.parallelize(range(10000),5)
a.persist(StorageLevel.MEMORY_AND_DISK)
sum_a = a.reduce(lambda x,y:x+y)
cnt_a = a.count()
mean_a = sum_a/cnt_aa.unpersist() #立即釋放緩存
print(mean_a)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/15111.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/15111.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/15111.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

層次式架構設計理論與實踐

層次式體系結構概述 軟件體系結構為軟件系統提供了結構、行為和屬性的高級抽象&#xff0c;由構成系統的元素描述這些元素的相互作用、指導元素集成的模式以及這些模式的約束組成。 層次式體系結構的每一層最多只影響兩層&#xff0c;同時只要給相鄰層提供相同的接口&#xff…

禁用win10自動更新

services.msc——Windows Update——常規——啟動類型——禁用 services.msc——Windows Update——恢復——三個無操作&#xff0c;9999天。 gpedit.msc——計算機配置——管理模板——Windows組件——Windows更新——配置自動更新——已啟用——2-通知下載和自動更新 Windows…

如何參與github開源項目并提交PR

&#x1f47d;System.out.println(“&#x1f44b;&#x1f3fc;嗨&#xff0c;大家好&#xff0c;我是代碼不會敲的小符&#xff0c;目前工作于上海某電商服務公司…”); &#x1f4da;System.out.println(“&#x1f388;如果文章中有錯誤的地方&#xff0c;懇請大家指正&…

高速公路定向廣播(聲光一體) HT-600D

1、產品概述&#xff1a; HT-600D聲光一體平面波IP定向廣播是北京恒星科通創新性研發產品&#xff0c;采用公司自主研發的平面波傳聲技術&#xff0c;該產品具有高聲壓、強指向性、高清晰度等特點&#xff0c;采用定向聲傳聲技術將聲音聚集到正前方定向傳輸,周邊聲壓級明顯降低…

BTC系列-系統學習銘文(二)-序數理論

Ordinals的BIP: https://github.com/ordinals/ord/blob/master/bip.mediawiki 序數理論概述 序數是一種比特幣的編號方案&#xff0c;允許跟蹤和轉移單個聰。這些數字被稱作序號。比特幣是按照它們被挖掘的順序編號的&#xff0c;并從交易輸入轉移到交易輸出&#xff08;遵循先…

面試題:對已經關閉的channel進行讀寫

在Go語言中對已經關閉的channel進行讀寫&#xff0c;結果會有所不同。 讀操作 我們可以安全地從一個已經關閉的channel中進行讀取數據。如果channel中還有未讀取的數據&#xff0c;讀操作將成功并返回數據以及一個用于表示數據是否有效的標記(如果channel已經關閉并且該數據有…

YOLOV10實時端到端目標檢測

代碼地址&#xff1a;GitHub - THU-MIG/yolov10: YOLOv10: Real-Time End-to-End Object Detection 論文地址&#xff1a;https://arxiv.org/pdf/2405.14458 本文介紹了YOLO系列目標檢測器在實時和高效方面的優勢&#xff0c;但是仍然存在一些缺陷&#xff0c;包括依賴非極大值…

[240525] VMware Pro 個人可免費使用 | 人機交互角度 解釋 AI 同事出錯雖多但深得青睞之奧義

目錄 VMware Workstation Pro 個人可免費使用人機交互研究 ChatGPT 52%回答失實&#xff0c;78%邏輯不一致然卻備受青睞之奧義 VMware Workstation Pro 個人可免費使用 VMware 宣布 Fusion Pro&#xff08;Mac&#xff09;和 Workstation Pro&#xff08;Windows 和 Linux&…

純度高的安卓和混血安卓

安卓陣營純安卓和改裝安卓&#xff0c;純安卓好用&#xff0c;權限控制力度做到很小&#xff0c;每相權限都交用戶控制&#xff0c;權限控制層面可以精確到文件夾和文件&#xff0c;剪切板讀和寫&#xff0c;而且有精確權限追蹤功能&#xff0c;國產高度定制安卓系統只有粗糙訪…

React useState修改對象

在 React 中&#xff0c;useState 是一個 Hook&#xff0c;它可以讓函數組件擁有狀態。當想要改變一個對象類型的狀態時&#xff0c;我們需要使用展開運算符&#xff08;...&#xff09;或者 Object.assign 來確保狀態是正確地更新。 以下是一個使用 useState 來更新對象的例子…

webstorm新建vue項目相關問題

前言 這個迭代后端需求偏少&#xff0c;前端code的鍵盤都起火星子了。來了4個外包支持&#xff0c;1個后端3個前端&#xff0c;還是不夠用啊。剛好趁這個機會稍微學習下vue&#xff0c;其實之前環境也配置過了&#xff0c;所以這里就不分享環境配置了&#xff0c;主要分享下新建…

基于單片機電梯控制系統設計與實現

摘 要: 介紹了電梯控制系統架構 &#xff0c; 指出了該系統的硬件設計和控制系統的軟件設計以及系統調試 &#xff0c; 使系統可根據按鍵 要求完成載客任務&#xff0c;為電梯控制系統的優化提供了參考 。 關鍵詞 : 電梯控制 ; 單片機 ; 系統設計 0 引言 在高層建筑中發揮…

Java開發大廠面試第22講:Redis 是如何保證系統高可用的?它的實現方式有哪些?

高可用是通過設計&#xff0c;減少系統不能提供服務的時間&#xff0c;是分布式系統的基礎也是保障系統可靠性的重要手段。而 Redis 作為一款普及率最高的內存型中間件&#xff0c;它的高可用技術也非常的成熟。 我們今天分享的面試題是&#xff0c;Redis 是如何保證系統高可用…

GPT-4o之多模態

前言 想必&#xff0c;很多小伙伴都知道GPT-4o已經發布了&#xff0c;一手基于多模態的問答顯示&#xff0c;看起來挺厲害的&#xff08;也就是看起來&#xff0c; &#xff09;。然后&#xff0c;我就順手看了看什么是多模態。 簡介 多模態&#xff08;Multimodal&#xff…

什么是組態?什么是工業控制中的組態軟件?

隨著工業4.0和智能制造的發展&#xff0c;工控軟件的應用越來越廣泛&#xff0c;它們在提高生產效率、降低能耗和減少人力成本等方面發揮著越來越重要的作用。 什么是工控軟件&#xff1f; 工控軟件是指用于工業控制系統的軟件&#xff0c;主要應用于各種生產過程控制、自動化…

標準庫算法

歡迎訪問我的博客首頁。 標準庫算法 1. 查找對象的算法2. 其它只讀算法3. 二分搜索算法4. 寫容器元素的算法5. 劃分與排序算法6. 通用重排操作7. 排列算法8. 有序序 列的 集合算法9. 最 小值和 最大值10. 數值算法11. 參考 Pred 表示返回值為布爾類型的可調用對象。 1. 查找對…

Python序列的概念與使用-課后作業[python123題庫]

序列的概念與使用-課后作業 一、單項選擇題 1、關于Python組合數據類型&#xff0c;以下描述錯誤的是&#xff1a;??????????????????????????????????????????????????????????????????????????…

Flutter 中的 DecoratedBox 小部件:全面指南

Flutter 中的 DecoratedBox 小部件&#xff1a;全面指南 在Flutter中&#xff0c;DecoratedBox是一個功能豐富的小部件&#xff0c;它為子組件提供了多種裝飾效果&#xff0c;如背景色、邊框和陰影。通過DecoratedBox&#xff0c;你可以輕松地為任何小部件添加裝飾&#xff0c…

PLSQL連接Linux Oracle21c

PLSQL連接Linux Oracle21c 一、安裝PLsql 下載官網 https://www.allroundautomations.com/registered-plsqldev/ 二、Oracle Instant Client下載 使用plsql連接oracle的時候是需要本地先安裝oracle客戶端&#xff0c;英文名就是Oracle Instant Client。 官方下載地址&…

初出茅廬的小李博客之用MQTT.fx軟件進行消息發布與訂閱【 基于EMQX Cloud】

MQTT.fx軟件使用簡單介紹 MQTT.fx 的軟件界面如下圖所示&#xff0c;最上方為 MQTT Broker 連接地址欄&#xff0c;及其連接配置。其下方功能 Tabs 含有 Publish 發布欄、Subscribe 訂閱欄、Scripts 腳本欄、Broker Status 狀態消息欄、Log 日志信息控制欄。 連接之前要明確幾…