【pyspark速成專家】3_Spark之RDD編程1

目錄

?編輯

一,創建RDD

二,常用Action操作

三,常用Transformation操作


一,創建RDD

創建RDD主要有兩種方式,一個是textFile加載本地或者集群文件系統中的數據,

第二個是用parallelize方法將Driver中的數據結構并行化成RDD。

#從本地文件系統中加載數據
file = "./data/hello.txt"
rdd = sc.textFile(file,3)
rdd.collect()['hello world','hello spark','spark love jupyter','spark love pandas','spark love sql']#從集群文件系統中加載數據
#file = "hdfs://localhost:9000/user/hadoop/data.txt"
#也可以省去hdfs://localhost:9000
#rdd = sc.textFile(file,3)#parallelize將Driver中的數據結構生成RDD,第二個參數指定分區數
rdd = sc.parallelize(range(1,11),2)
rdd.collect()[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

二,常用Action操作

Action操作將觸發基于RDD依賴關系的計算。

collect

rdd = sc.parallelize(range(10),5) 
#collect操作將數據匯集到Driver,數據過大時有超內存風險
all_data = rdd.collect()
all_data[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

take

#take操作將前若干個數據匯集到Driver,相比collect安全
rdd = sc.parallelize(range(10),5) 
part_data = rdd.take(4)
part_data[0, 1, 2, 3]

takeSample

#takeSample可以隨機取若干個到Driver,第一個參數設置是否放回抽樣
rdd = sc.parallelize(range(10),5) 
sample_data = rdd.takeSample(False,10,0)
sample_data[7, 8, 1, 5, 3, 4, 2, 0, 9, 6]

first

#first取第一個數據
rdd = sc.parallelize(range(10),5) 
first_data = rdd.first()
print(first_data)0

count

#count查看RDD元素數量
rdd = sc.parallelize(range(10),5)
data_count = rdd.count()
print(data_count)10

reduce

#reduce利用二元函數對數據進行規約
rdd = sc.parallelize(range(10),5) 
rdd.reduce(lambda x,y:x+y)45

foreach

#foreach對每一個元素執行某種操作,不生成新的RDD
#累加器用法詳見共享變量
rdd = sc.parallelize(range(10),5) 
accum = sc.accumulator(0)
rdd.foreach(lambda x:accum.add(x))
print(accum.value)45

countByKey

#countByKey對Pair RDD按key統計數量
pairRdd = sc.parallelize([(1,1),(1,4),(3,9),(2,16)]) 
pairRdd.countByKey()defaultdict(int, {1: 2, 3: 1, 2: 1})

saveAsTextFile

#saveAsTextFile保存rdd成text文件到本地
text_file = "./data/rdd.txt"
rdd = sc.parallelize(range(5))
rdd.saveAsTextFile(text_file)#重新讀入會被解析文本
rdd_loaded = sc.textFile(text_file)
rdd_loaded.collect()['2', '3', '4', '1', '0']

三,常用Transformation操作

Transformation轉換操作具有懶惰執行的特性,它只指定新的RDD和其父RDD的依賴關系,只有當Action操作觸發到該依賴的時候,它才被計算。

map

#map操作對每個元素進行一個映射轉換
rdd = sc.parallelize(range(10),3)
rdd.collect()[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]rdd.map(lambda x:x**2).collect()[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

filter

#filter應用過濾條件過濾掉一些數據
rdd = sc.parallelize(range(10),3)
rdd.filter(lambda x:x>5).collect()[6, 7, 8, 9]

flatMap

#flatMap操作執行將每個元素生成一個Array后壓平
rdd = sc.parallelize(["hello world","hello China"])
rdd.map(lambda x:x.split(" ")).collect()[['hello', 'world'], ['hello', 'China']]rdd.flatMap(lambda x:x.split(" ")).collect()['hello', 'world', 'hello', 'China']

sample

#sample對原rdd在每個分區按照比例進行抽樣,第一個參數設置是否可以重復抽樣
rdd = sc.parallelize(range(10),1)
rdd.sample(False,0.5,0).collect()[1, 4, 9]

distinct

#distinct去重
rdd = sc.parallelize([1,1,2,2,3,3,4,5])
rdd.distinct().collect()[4, 1, 5, 2, 3]

subtract

#subtract找到屬于前一個rdd而不屬于后一個rdd的元素
a = sc.parallelize(range(10))
b = sc.parallelize(range(5,15))
a.subtract(b).collect()[0, 1, 2, 3, 4]

union

#union合并數據
a = sc.parallelize(range(5))
b = sc.parallelize(range(3,8))
a.union(b).collect()[0, 1, 2, 3, 4, 3, 4, 5, 6, 7]

intersection

#intersection求交集
a = sc.parallelize(range(1,6))
b = sc.parallelize(range(3,9))
a.intersection(b).collect()[3, 4, 5]

cartesian

#cartesian笛卡爾積
boys = sc.parallelize(["LiLei","Tom"])
girls = sc.parallelize(["HanMeiMei","Lily"])
boys.cartesian(girls).collect()[('LiLei', 'HanMeiMei'),('LiLei', 'Lily'),('Tom', 'HanMeiMei'),('Tom', 'Lily')]

sortBy

#按照某種方式進行排序
#指定按照第3個元素大小進行排序
rdd = sc.parallelize([(1,2,3),(3,2,2),(4,1,1)])
rdd.sortBy(lambda x:x[2]).collect()[(4, 1, 1), (3, 2, 2), (1, 2, 3)]

zip

#按照拉鏈方式連接兩個RDD,效果類似python的zip函數
#需要兩個RDD具有相同的分區,每個分區元素數量相同rdd_name = sc.parallelize(["LiLei","Hanmeimei","Lily"])
rdd_age = sc.parallelize([19,18,20])rdd_zip = rdd_name.zip(rdd_age)
print(rdd_zip.collect())[('LiLei', 19), ('Hanmeimei', 18), ('Lily', 20)]

zipWithIndex

#將RDD和一個從0開始的遞增序列按照拉鏈方式連接。
rdd_name =  sc.parallelize(["LiLei","Hanmeimei","Lily","Lucy","Ann","Dachui","RuHua"])
rdd_index = rdd_name.zipWithIndex()
print(rdd_index.collect())[('LiLei', 0), ('Hanmeimei', 1), ('Lily', 2), ('Lucy', 3), ('Ann', 4), ('Dachui', 5), ('RuHua', 6)]

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

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

相關文章

fortran77 初始化矩陣 打印矩陣 模版 備拷

1,源碼 SUBROUTINE INIT_MATRIX(A, m, n, lda)DOUBLE PRECISION A(*)CALL SRAND(2024)DO i1, mDO j1, nA(i lda*(j-1)) RAND() RAND() C WRITE(*, (F8.4)) A(i)END DOEND DOENDSUBROUTINE PRINT_MATRIX(A, m, n, lda)DOUBLE PREC…

解釋Python中的上下文管理器(context manager)

Python中的上下文管理器(Context Manager)是一種用于管理某些資源的對象,如文件、網絡連接、數據庫連接等。這些資源在使用完畢后需要進行清理操作,如關閉文件、斷開連接等。通過上下文管理器,Python提供了一種優雅的方…

【Vue3】封裝axios請求(cli和vite)

原文作者:我輩李想 版權聲明:文章原創,轉載時請務必加上原文超鏈接、作者信息和本聲明。 Vue 【Vue3】env環境變量的配置和使用(區分cli和vite) 文章目錄 Vue前言一、常見用法二、vue3cli封裝接口1..env配置2..dev(開…

ADC協議詳解

文章目錄 簡介工作流程原理圖時序圖 優點與缺點 簡介 模數轉換器(ADC,Analog-to-Digital Converter)是一種將模擬信號轉換為數字信號的電子設備。模擬信號通常表示物理測量的連續變化,如聲音、溫度、壓力等,而數字信號…

codewars check_same_case 題解

題目 編寫一個函數來檢查兩個給定的字符是否大小寫相同。 如果任何字符不是字母,則返回-1如果兩個字符大小寫相同,則返回1如果兩個字符都是字母且大小寫不同,則返回0 例子 a并g返回1A并C返回1b并G返回0B并g返回00并?返回-1題解 1 此題主…

AI大模型與產品策略:產品經理的致勝之道

隨著AI大模型的快速進化,其生態的構建,已經從C端過度到了B端。 作為產品經理,我們應該及時響應大趨勢,在產品策略上融入AI大模型模塊,深度挖掘AI大模型的應用價值,這才是作為PM在現階段最有價值的地方。 …

想學接口測試,不知道那個工具適合?

引言: 接口測試在軟件開發中扮演著至關重要的角色,它可以幫助我們驗證系統的功能、性能和安全性。而選擇適合的工具是進行接口測試的重要一步。本文將從零開始,為你詳細介紹如何選擇合適的工具,并提供規范的指導。 一、了解接口…

初識C語言——第二十八天

代碼練習1&#xff1a; 用函數的方式實現9*9乘法表 void print_table(int n) {int i 0;int j 0;for (i 1; i< n; i){for (j 1; j< i; j){printf("%d*%d%-3d ", i, j, i * j);}printf("\n");}}int main() {int n 0;scanf("%d", &a…

shell :二進制安裝docker

#!/bin/bash #設置字體顏色 function RedFont(){echo -e "\033[31mError: $1 \033[0m" }function GreenFont(){echo -e "\033[32mInfo: $1 \033[0m" }function YellowFont(){echo -e "\033[33mWarning: $1 \033[0m" }CURRENT_DIRpwd FILE_NAMEdo…

漢明碼(海明碼)的計算的規則

一.漢明碼的由來 1.漢明碼&#xff08;Hamming Code&#xff09;&#xff0c;是在電信領域的一種線性調試碼&#xff0c;以發明者理查德衛斯里漢明的名字命名。漢明碼在傳輸的消息流中插入驗證碼&#xff0c;當計算機存儲或移動數據時&#xff0c;可能會產生數據位錯誤&#x…

【VUE】 如何關閉ESlint的自動修復功能

問題描述例如&#xff1a;原書寫代碼ESLint自動修復報錯如下 方案一、在文件中添加屏蔽警告的代碼html代碼中JavaScript代碼中 方案二、關閉ESLint的自動修復功能1、VSCode 擴展找到 ESLint 插件2、在設置中找到在 settings,json 中編輯3、將"autoFix": true改為&quo…

3.2 運維、運營和經營

第3章 信息技術服務知識 3.2 運維、運營和經營 3.2.1 運維 1、運維是運行維護的簡稱&#xff0c;是一種IT服務形態。2、在《信息技術服務分類與代碼》&#xff08;GB/T29264-20l2&#xff09;中&#xff0c;對運行維護服務&#xff08;operation maintenance service&#x…

4.雙指針+遞歸

一、雙指針編程技巧 方法參數傳遞數組 將數組通過方法參數傳遞&#xff0c;方法操作的數組和main方法中的數組指向同一塊內存區域&#xff0c;意味著方法操作數組&#xff0c;同時會引起main方法中數組的改變以引用的方式作為方法參數進行傳遞的 元素交換 定義臨時變量temp&a…

第十二節 SpringBoot Starter 系列結束語

感謝閱讀&#xff0c;到這里&#xff0c;本系列課程就結束了。 一、為什么選擇 SpringBoot Starter SpringBoot 近年來已經成為 Java 應用的必備框架&#xff1b; 而 SpringBoot starter 模式已經成為各大中間件集成到 SpringBoot 應用的首選方式&#xff0c;通過引入 xxx-st…

C++ | Leetcode C++題解之第101題對稱二叉樹

題目&#xff1a; 題解&#xff1a; class Solution { public:bool check(TreeNode *u, TreeNode *v) {queue <TreeNode*> q;q.push(u); q.push(v);while (!q.empty()) {u q.front(); q.pop();v q.front(); q.pop();if (!u && !v) continue;if ((!u || !v) ||…

爬蟲基礎1

一、爬蟲的基本概念 1.什么是爬蟲&#xff1f; 請求網站并提取數據的自動化程序 2.爬蟲的分類 2.1 通用爬蟲&#xff08;大而全&#xff09; 功能強大&#xff0c;采集面廣&#xff0c;通常用于搜索引擎&#xff1a;百度&#xff0c;360&#xff0c;谷歌 2.2 聚焦爬蟲&#x…

Android App啟動流程和源碼詳解

前言 之前看了些App啟動流程的文章&#xff0c;但是看得很淺顯&#xff0c;隔了沒多久就忘了&#xff0c;自己抓耳撓腮的終于看完了&#xff0c;看得頭疼哦。因為很多是個人理解&#xff0c;大哥們主打一個7分信&#xff0c;2分思考&#xff0c;1分懷疑哈。 主要看的源碼是An…

pytorch-20_1 LSTM在股價數據集上的預測實戰

LSTM在股價數據集上的預測實戰 使用完整的JPX賽題數據&#xff0c;并向大家提供完整的lstm流程。 導包 import numpy as np #數據處理 import pandas as pd #數據處理 import matplotlib as mlp import matplotlib.pyplot as plt #繪圖 from sklearn.preprocessing import M…

人類交互4 感覺輸入和運動輸出

人類感覺系統概述 人類感覺系統是由多個感覺器官和神經系統組成&#xff0c;負責感知外部世界的各種刺激和信息。人類感覺系統包括以下幾個主要部分&#xff1a; 視覺系統&#xff1a;視覺系統由眼睛、視神經和大腦視覺皮層組成&#xff0c;負責感知光線、顏色和形狀&#xff…

datasheet芯片數據手冊—新手入門學習(二)【8-18】

參考芯片手冊已經上傳&#xff0c;可自行下載 因為芯片參考手冊內容比較多&#xff0c;故再一次介紹本文內容主要講解章節。 目錄 8、內容介紹 命令真值表 9、Command Definitions 10、READ Operations &#xff08;1&#xff09;頁面讀取操作 &#xff08;2&#xff…