PySpark基礎知識(python)

PySpark 是 Apache Spark 的 Python API,它允許開發者使用 Python 語言編寫 Spark 應用程序,結合了 Python 的易用性和 Spark 的分布式計算能力,是處理大規模數據的強大工具。

一、安裝與環境配置

  1. 安裝方式
    通過 pip 安裝:pip install pyspark(速度慢可以使用清華鏡像Links for pyspark
    (需注意:PySpark 依賴 Java 環境,需提前安裝 JDK 8 或以上版本)

  2. 運行模式

    • 本地模式(local[*]):用于開發測試,利用本地 CPU 核心模擬集群。
    • 集群模式:需部署 Spark 集群(Standalone/YARN/Kubernetes),適合生產環境。

二、PySpark 的核心定位

  • 橋梁作用:PySpark 將 Spark 的分布式計算能力與 Python 的生態系統(如 NumPy、Pandas、Scikit-learn)無縫結合,讓熟悉 Python 的開發者無需學習 Scala(Spark 原生語言)即可使用 Spark。
  • 適用場景:大規模數據處理、機器學習、數據挖掘、實時流處理等,尤其適合數據科學家和 Python 開發者。

三、核心組件與功能

PySpark 基于 Spark 的核心引擎,主要包含以下組件:

  1. Spark Core(核心組件)

    • 提供 RDD(彈性分布式數據集)作為基本數據抽象,支持分布式計算、任務調度、內存管理等底層功能。
    • 你的代碼中SparkContext就是 Core 組件的入口,用于創建 RDD 和配置 Spark 應用。
  2. Spark SQL

    • 用于處理結構化數據,支持 SQL 查詢和 DataFrame/DataSet API。
    • 相比 RDD,DataFrame 提供了更高效的計算和更簡潔的 API(類似 Pandas DataFrame,但支持分布式處理)。
  3. Spark Streaming

    • 處理實時流數據(如日志、消息隊列),支持從 Kafka、Flume 等數據源讀取數據,并進行低延遲處理。
  4. MLlib

    • 分布式機器學習庫,提供分類、回歸、聚類等算法(如邏輯回歸、隨機森林),支持大規模數據集上的模型訓練。
  5. GraphX

    • 分布式圖計算庫,用于處理圖結構數據(如社交網絡關系),提供圖算法(如 PageRank)。

四、PySpark 的優勢

  1. 分布式計算能力
    突破單機內存和算力限制,可在集群中并行處理 TB/PB 級數據,比傳統單機 Python 工具(如 Pandas)更適合大數據場景。

  2. 惰性計算優化
    操作不會立即執行,而是等到 “行動操作”(如collectcount)時才觸發,Spark 會自動優化執行計劃,減少冗余計算。

  3. 豐富的 API
    提供 RDD、DataFrame、SQL 等多種 API,滿足不同場景需求:

    • RDD:靈活,適合復雜數據處理邏輯。
    • DataFrame:結構化數據處理,性能優于 RDD。
    • SQL:直接使用 SQL 語句查詢數據,降低使用門檻。
  4. 兼容 Python 生態
    可直接調用 Python 庫(如 NumPy 處理數值、Matplotlib 可視化),同時支持將 Spark 結果轉換為 Pandas DataFrame 進行后續分析。

  5. 容錯機制
    通過 RDD 的 “血統”(Lineage)記錄依賴關系,當數據丟失時可自動重建,確保計算可靠性。

五、基本使用流程

以你的代碼為基礎,PySpark 的典型使用步驟如下:

1.初始化 Spark 環境
通過SparkConf配置應用(如設置 Master 節點、應用名稱),再創建SparkContext(核心入口):

from pyspark import SparkConf, SparkContext
conf = SparkConf().setMaster("local[*]").setAppName("my_app")  # local[*]表示本地模式,使用所有CPU核心
sc = SparkContext(conf=conf)

2.創建 RDD/DataFrame

  • 從內存數據創建(如列表、元組):sc.parallelize([1,2,3])
  • 從外部文件創建:sc.textFile("path/to/file")(文本文件)、spark.read.csv("file.csv")(CSV 文件,需用 SparkSession)
# 通過parallelize方法將python對象加載到Spark內,成為RDD對象
rdd1 = sc.parallelize([1,2,3,4,5])  # 列表
rdd2 = sc.parallelize((1,2,3,4,5))  # 元組
rdd3 = sc.parallelize("abcdefg")    # 字符串
rdd4 = sc.parallelize({1,2,3,4,5})  # 集合
rdd5 = sc.parallelize({"key1": "value1","key2":"value2"})  # 字典# # 查看RDD里面的內容,需要用collect()方法
print("列表RDD:", rdd1.collect())
print("元組RDD:", rdd2.collect())
print("字符串RDD:", rdd3.collect())
print("集合RDD:", rdd4.collect())
print("字典RDD:", rdd5.collect())  # 注意:字典會只保留鍵rdd = sc.textFile("D:/test.txt")
print(rdd.collect())

3.數據處理
使用轉換操作(如mapfiltergroupBy)處理數據,例如:

rdd = sc.parallelize([1,2,3,4,5])
filtered_rdd = rdd.filter(lambda x: x > 2)  # 過濾出大于2的元素

4.執行計算并獲取結果
通過行動操作觸發計算并返回結果,例如:

print(filtered_rdd.collect())  # 輸出:[3,4,5],collect()將分布式數據拉取到本地

5.關閉 Spark 環境
任務結束后關閉SparkContext釋放資源:

sc.stop()

六、與傳統 Python 工具的對比

工具特點適用場景
PySpark分布式計算,支持大數據,惰性計算TB/PB 級數據處理、集群環境
Pandas單機內存計算,API 簡潔,適合小數據單機小數據(GB 級以內)
Dask并行化 Pandas/NumPy,支持中等規模數據單機多核或小規模集群

PySpark 的核心優勢在于分布式架構,能處理遠超單機內存的數據,而 Pandas 等工具更適合單機環境的小規模數據處理。

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

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

相關文章

基于python大數據的電影數據分析可視化系統設計與應用

標題:基于python大數據的電影數據分析可視化系統設計與應用內容:1.摘要 本研究旨在設計并實現一個基于Python的大數據電影數據分析與可視化系統,以解決當前電影行業數據分散、分析效率低及可視化能力不足的問題。系統采用Python語言結合Pandas、NumPy進行數據清洗與…

【PyTorch】圖像多分類

多類圖像分類的目標是為一組固定類別中的圖像分配標簽。目錄 加載和處理數據 搭建模型 定義損失函數 定義優化器 訓練和遷移學習 用隨機權重進行訓練 用預訓練權重進行訓練 加載和處理數據 將使用 PyTorch torchvision 包中提供的 STL-10 數據集,數據集中有…

計算機視覺----opencv實戰----指紋識別的案例

一、數據準備src2.BMPsrc1.BMPsrc.bmpmodel.BMP二、識別原理講解(sift特征提取)SIFT(Scale-Invariant Feature Transform,尺度不變特征變換)是一種經典的圖像特征提取算法,核心優勢是不受圖像尺度縮放、旋轉…

npm 發布流程——從創建組件到發布到 npm 倉庫

1. 準備組件 1.1 創建一個 Vue 組件 假設我們要創建一個簡單的按鈕組件&#xff1a; src/MyButton.vue <template><button class"my-btn" click"$emit(click)"><slot /></button> </template><script setup lang"ts…

MySQL入門基礎指南

目錄 一、什么是數據庫&#xff1f; 僅依靠文件存儲數據存在以下幾個明顯缺點&#xff1a; 數據庫的存儲介質通常包括&#xff1a; 二、主流數據庫介紹 三、客戶端 VS 服務器 四、推薦看的MySQL安裝技術博客 五、數據庫的存儲介質 數據庫的存儲介質主要分為以下兩類&am…

【實戰中提升自己完結篇】分支篇之分支之無線、內網安全與QOS部署(完結)

1 1拓撲 「模擬器、工具合集」復制整段內容 鏈接&#xff1a;https://docs.qq.com/sheet/DV0xxTmFDRFVoY1dQ?tab7ulgil1 分支無線部署 說明&#xff1a;分支無線用瘦AP部署&#xff0c;通過VPN直接注冊到總部的AC上面&#xff0c;實現無線的業務提供&…

帶你了解STM32:GPIO通用輸入輸出口

目錄 3.1 GPIO簡介 3.2 GPIO基本結構 3.3 GPIO位結構 輸入部分&#xff1a; 二極管的保護作用&#xff1a; 施密特觸發器&#xff1a; 片上外設端口 輸出部分&#xff1a; MOS管 3.4 GPIO模式 3.4.1 浮空/上拉/下拉輸入 3.4.2 模擬輸入 3.4.3 開漏/推挽輸出 3.4.…

Http(自寫)

作為一個程序員&#xff0c;假設我們要在a電腦的進程里發一段數據到b電腦&#xff0c;一般使用socket編程&#xff0c;可選項也就tcp&#xff0c;udp二選一socket本質上就是一個代碼庫tcp有粘包問題&#xff08;字節流&#xff09;&#xff0c;純裸tcp不能之際拿來使用所以我們…

C#使用OpenVinoSharp和PP-Human進行行人檢測

效果 項目依賴 OpenCvSharp 4.11.0.20250507 OpenVINO.CSharp.Windows 2024.0.0.1 主要代碼 using OpenCvSharp; using OpenVinoSharp; using System; using System.Windows.Forms;namespace HelloPPHuman {public partial class Form1 : Form{public Form1(){InitializeCo…

四、Scala深入面向對象:類、對象與伴生關系

在前幾節中&#xff0c;我們學習了 Scala 的基礎語法和流程控制。現在&#xff0c;我們將深入探索 Scala 作為一門純粹的面向對象語言的核心。在 Scala 中&#xff0c;萬物皆對象&#xff0c;沒有像 Java 那樣的原始類型和靜態成員的區分。本節將重點介紹如何定義對象的藍圖&am…

【大語言模型 58】分布式文件系統:訓練數據高效存儲

分布式文件系統&#xff1a;訓練數據高效存儲 關鍵詞&#xff1a;分布式文件系統、HDFS、Lustre、GlusterFS、數據本地性、I/O優化、存儲架構、大數據存儲、訓練數據管理、存儲性能調優 摘要&#xff1a;本文深入探討大語言模型訓練中的分布式文件系統技術&#xff0c;從存儲架…

【科研繪圖系列】R語言繪制散點圖以及線性回歸擬合曲線圖

禁止商業或二改轉載,僅供自學使用,侵權必究,如需截取部分內容請后臺聯系作者! 文章目錄 介紹 加載R包 數據下載 函數 導入數據 數據預處理 畫圖 總結 系統信息 介紹 數據導入 代碼的開始部分涉及多個數據集的導入,這些數據集涵蓋了不同類型的生態學數據,包括實驗室培養…

SQL 數據庫操作語言詳解

1. SQL 語言概述SQL&#xff08;Structured Query Language&#xff09;是用于管理關系型數據庫的標準語言&#xff0c;主要分為以下幾個子語言&#xff1a;- DQL&#xff08;數據查詢語言&#xff09;&#xff1a;SELECT - 用于數據查詢 - DML&#xff08;數據操作語言&#x…

積分變換的前世今生

積分變換常應用于解微分方程微分方程的解法&#xff1a;時域經典法&#xff1b;頻域變換法&#xff1b;“積分變換”最初并不是為了解微分方程&#xff0c;而是出于更“純粹”的數學動機——理解函數的結構、求解代數或幾何問題&#xff0c;以及簡化復雜的積分運算。微分方程的…

《Linux——gflags》

一、什么是gflags&#xff1f; gflags 是一個由 Google 開發的命令行參數解析庫&#xff0c;主要用于在 C&#xff08;也支持其他語言&#xff09;程序中便捷地處理命令行參數。它的核心作用是幫助開發者快速定義、解析和使用命令行選項&#xff0c;避免手動編寫繁瑣的參數解析…

編譯器的前端中端和后端

前面說的詞法分析和語法分析&#xff0c;確實是編譯器前端 (Front End) 最核心的兩個部分。但前端的工作還沒有結束。編譯器各階段劃分 一個完整的編譯器通常可以分為三個部分&#xff1a;前端、中端 (Middle End)、后端 (Back End)。 前端 (Front End) 核心職責: 理解源代碼。…

黑馬Java進階教程,全面剖析Java多線程編程,并發和并行,筆記02

黑馬Java進階教程&#xff0c;全面剖析Java多線程編程&#xff0c;并發和并行&#xff0c;筆記02 一、并發和并行 并發&#xff1a;在同一時刻&#xff0c;有多個指令在單個CPU上交替執行 并行&#xff1a;在同一時刻&#xff0c;有多個指令在多個CPU上同時執行 二、為什么有…

20250908 背包DP總結

引子 ~ 我們都有一個家&#xff0c;名字叫背包 ~ 背包DP 顧名思義&#xff0c;背包DP是用來解決背包最值問題的。題目會給出背包的容量&#xff0c;以及幾個物品的屬性&#xff0c;比如重量&#xff0c;價值&#xff0c;限額等等&#xff0c;具體是什么看題目。 01背包 01…

Redis持久化之RDB:快照機制原理、配置與最佳實踐

Redis持久化之RDB&#xff1a;快照機制原理、配置與最佳實踐 1. RDB持久化概述 1.1 什么是RDB RDB&#xff08;Redis Database&#xff09;是Redis的默認持久化方式&#xff0c;它在指定的時間間隔內生成數據集的快照&#xff08;snapshot&#xff09;&#xff0c;并將快照保…

daily notes[44]

文章目錄基礎references基礎 hello,world是幾乎所有編程語言的第一例子&#xff0c;rust也不例外。但和其它語言不一樣&#xff0c;Rust的源碼最好擁有自己的項目目錄。 $ mkdir ~/pro $ cd ~/pro $ mkdir helloWorld $ cd helloWorld源代碼文件名為main.rs&#xff0c;內容如…