Spark基礎介紹

1. Spark 核心概念
1.1 RDD(彈性分布式數據集)
  • 定義:RDD(Resilient Distributed Dataset)是 Spark 的核心抽象,是不可變、可分區、容錯的分布式數據集合。
  • 特性
    • 彈性:自動進行內存和磁盤之間的數據存儲切換。
    • 分布式:數據分區存儲在集群的多個節點上。
    • 容錯:通過 Lineage(血緣關系)重建丟失的數據分區。
  • 創建方式
    • 從 HDFS、本地文件等外部數據源創建。
    • 從現有 RDD 轉換而來。
    • 并行化集合(如?sc.parallelize([1,2,3]))。
1.2 轉換(Transformation)與動作(Action)
  • 轉換:惰性操作,返回新的 RDD(如?map,?filter,?reduceByKey)。
  • 動作:觸發計算并返回結果(如?collect,?count,?saveAsTextFile)。
  • 惰性計算:轉換操作不會立即執行,只有當動作觸發時才會進行計算。
1.3 共享變量
  • 廣播變量(Broadcast Variables):在每個節點緩存一份只讀變量,減少數據傳輸。
  • 累加器(Accumulators):只能通過關聯操作累加,用于計數或求和等場景。
2. Spark 編程模型
2.1 SparkContext
  • Spark 應用的入口點,負責與集群管理器通信,創建 RDD、累加器和廣播變量。
  • 在 Spark 2.x 后,推薦使用?SparkSession?統一處理 SQL 和 DataFrame 操作。
2.2 基本操作示例

python

運行

# Python API (PySpark) 示例
from pyspark.sql import SparkSession# 創建 SparkSession
spark = SparkSession.builder \.appName("WordCount") \.getOrCreate()# 創建 RDD
lines = spark.sparkContext.textFile("hdfs://path/to/input.txt")# 轉換操作
words = lines.flatMap(lambda x: x.split(" "))
pairs = words.map(lambda x: (x, 1))
counts = pairs.reduceByKey(lambda a, b: a + b)# 動作操作
counts.saveAsTextFile("hdfs://path/to/output")# 關閉 SparkSession
spark.stop()
3. Spark SQL & DataFrame
3.1 DataFrame
  • 帶 Schema 的分布式數據集,類似于關系型數據庫的表。
  • 支持 SQL 查詢和多種數據源(JSON、Parquet、Hive 等)。
  • 性能優化:Catalyst 優化器自動生成高效執行計劃。
3.2 Spark SQL
  • 通過 SQL 或 DSL 操作結構化數據。
  • 示例:

python

運行

# 創建 DataFrame
df = spark.read.json("hdfs://path/to/data.json")# SQL 查詢
df.createOrReplaceTempView("people")
results = spark.sql("SELECT name, age FROM people WHERE age > 20")# DataFrame API
results.select("name", "age").filter(df["age"] > 20).show()
4. Spark 集群架構
4.1 組件
  • Driver:運行用戶程序的主進程,負責調度任務。
  • Executor:工作節點上的進程,執行具體任務并緩存數據。
  • Cluster Manager:資源調度(如 YARN、Kubernetes、Standalone)。
4.2 任務執行流程
  1. Driver 分解作業為 DAG(有向無環圖)。
  2. DAG Scheduler 將 DAG 劃分為多個 Stage。
  3. Task Scheduler 將任務分配給 Executor 執行。
5. Spark 部署模式
5.1 本地模式
  • 單節點運行,主要用于開發和測試。

bash

spark-submit --master local[4] my_script.py
5.2 集群模式
  • Standalone:Spark 自帶的集群管理器。
  • YARN:Hadoop YARN 管理資源(常見于生產環境)。
  • Kubernetes:容器化部署(新興趨勢)。
6. 性能優化
6.1 內存管理
  • 合理配置?spark.memory.fraction(執行內存與存儲內存比例)。
  • 使用序列化(如 Kryo)減少內存占用。
6.2 數據傾斜處理
  • 加鹽(Salting):對 Key 增加隨機前綴。
  • 廣播大表 Join 中的小表。
6.3 其他優化
  • 重用 RDD:使用?cache()?或?persist()
  • 合并小文件:使用?coalesce()?減少分區數。
7. 生態系統
7.1 核心模塊
  • Spark Core:基礎引擎。
  • Spark SQL:結構化數據處理。
  • Spark Streaming:流處理。
  • MLlib:機器學習。
  • GraphX:圖計算。
7.2 集成工具
  • Zeppelin/Notebook:交互式開發。
  • MLflow:機器學習生命周期管理。
  • Delta Lake:數據湖事務處理。
8. 應用場景
  • 批處理:ETL、報表生成。
  • 實時分析:日志監控、實時推薦。
  • 機器學習:預測模型訓練。
  • 圖計算:社交網絡分析。

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

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

相關文章

采用SqlSugarClient創建數據庫實例引發的異步調用問題

基于SqlSugar編寫的多個WebApi接口,項目初始化時采用單例模式注冊SqlSugarClient實例對象,前端頁面采用layui布局,并在一個按鈕事件中通過Ajax連續調用多個WebApi接口獲取數據。實際運行時點擊按鈕會隨機報下面幾種錯誤: Execute…

[原創](現代Delphi 12指南):[macOS 64bit App開發]: 如何獲取當前用戶主目錄(即:~波浪符號目錄)?

[作者] 常用網名: 豬頭三 出生日期: 1981.XX.XX 企鵝交流: 643439947 個人網站: 80x86匯編小站 編程生涯: 2001年~至今[共24年] 職業生涯: 22年 開發語言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 開發工具: Visual Studio、Delphi、XCode、…

pdf url 轉 圖片

背景&#xff1a;vue2.0需要把pdf轉成圖片&#xff0c;顯示在url里面&#xff0c;使用pdfjs-dist來解決 步驟&#xff1a; 1、安裝依賴包(我的項目是node12&#xff0c;安裝太高版本會報錯) npm i pdfjs-dist2.16.105 2、vue代碼 <template><div class"main…

理解 Open vSwitch (OVS)

Open vSwitch&#xff08;簡稱 OVS&#xff09;是一個開源的 虛擬交換機&#xff0c;主要用于 虛擬化環境&#xff08;如 KVM、Xen、Docker&#xff09;和 軟件定義網絡&#xff08;SDN&#xff09;。它類似于物理交換機&#xff0c;但在軟件層面實現&#xff0c;可以靈活地管理…

S7-1500——零基礎入門1、工業編程基本概念

工業編程基本概念 一,數制與基本數據類型二,數字量信號三,模擬量信號一,數制與基本數據類型 本節主要內容 類別內容主題數制與基本數據類型數制講解十進制、十六進制、二進制及其進位規則;基數、位權概念數據類型介紹PLC 使用的數據類型:未序列數據類型(bit、byte、wor…

kotlin-協程(什么是一個協程)

1.什么指一個協程對于線程來說一個thread就是就是指一個線程&#xff0c;thread為什么成為線程呢&#xff1f;因為他實現了對線程的一個抽象管理&#xff0c;可以管理這個線程&#xff0c;啟動&#xff0c;可以查看各種信息 那么協程呢&#xff1f; public fun CoroutineScop…

七、深入 Hive DDL:管理表、分區與洞察元數據

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月13日 專欄&#xff1a;Hive教程 內容導航 一、表的 DDL 操作 (非創建)二、分區的 DDL 操作三、洞察元數據&#xff1a;SHOW 命令的威力結語&#xff1a;DDL 與 SHOW&#xff0c;Hive 管理的雙翼練習題一、選擇題二、代碼題…

【 Redis | 實戰篇 短信登錄 】

前言&#xff1a; 主要完成了基于Session實現登錄&#xff0c;解決集群的Session共享問題&#xff0c;從而實現了基于Redis來實現共享Session登錄 1.基于Session實現登錄 1.1.發送短信驗證碼 步驟&#xff1a; 前端提交手機號 》校驗手機號 》不符合返回錯誤信息&#xff0…

藍橋杯14屆國賽 合并數列

問題描述 小明發現有很多方案可以把一個很大的正整數拆成若干正整數的和。他采取了其中兩種方案&#xff0c;分別將他們列為兩個數組 {a1,a2,...,an} 和 {b1,b2,...,bm}。兩個數組的和相同。 定義一次合并操作可以將某數組內相鄰的兩個數合并為一個新數&#xff0c;新數的值是…

Doris和Clickhouse對比

目錄 一、Doris和Clickhouse對比1. 底層架構**DorisClickHouse** 2. 運行原理DorisClickHouse 3. 使用場景DorisClickHouse 4. 優缺點對比總結 二、MPP架構和Shared-Nothing 架構對比1. 什么是 MPP 架構&#xff1f;定義特點典型代表 2. 什么是 Shared-Nothing 架構&#xff1f…

niushop單商戶V5多門店版V5.5.0全插件+商品稱重、商家手機端+搭建環境教程

一.系統介紹 【全開源】niushop單商戶V5多門店版V5.5.0版本&#xff0c;我看很多人都想要 商品稱重、商家手機端等插件這套是全插件版本&#xff0c;整合起來本博主也花了不少啦~ Niushop系統是應用thinkphp6開發的完善的電商系統&#xff0c;擁有完善的商品機制&#xff0c;…

內存、磁盤、CPU區別,Hadoop/Spark與哪個聯系密切

1. 內存、磁盤、CPU的區別和作用 1.1 內存&#xff08;Memory&#xff09; 作用&#xff1a; 內存是計算機的短期存儲器&#xff0c;用于存儲正在運行的程序和數據。它的訪問速度非常快&#xff0c;比磁盤快幾個數量級。在分布式計算中&#xff0c;內存用于緩存中間結果、存儲…

Jenkins linux安裝

jenkins啟動 service jenkins start 重啟 service jenkins restart 停止 service jenkins stop jenkins安裝 命令切換到自己的下載目錄 直接用命令下載 wget http://pkg.jenkins-ci.org/redhat-stable/jenkins-2.190.3-1.1.noarch.rpm 下載直接安裝 rpm -ivh jenkins-2.190.3-…

RabbitMQ ②-工作模式

RabbitMQ 工作模式 官方提供了七種工作模式 Simple&#xff08;簡單模式&#xff09; P&#xff1a;生產者&#xff0c;發布消息到隊列C&#xff1a;消費者&#xff0c;從隊列中獲取消息并消費Queue&#xff1a;消息隊列&#xff0c;存儲消息。 一個生產者&#xff0c;一個…

(2)python開發經驗

文章目錄 1 pyside6加載ui文件2 使用pyinstaller打包 更多精彩內容&#x1f449;內容導航 &#x1f448;&#x1f449;Qt開發 &#x1f448;&#x1f449;python開發 &#x1f448; 1 pyside6加載ui文件 方法1&#xff1a; 直接加載ui文件 from PySide6.QtWidgets import QAp…

【C++】互斥鎖(Mutex)

在C中&#xff0c;互斥鎖&#xff08;Mutex&#xff09;是用于線程同步的重要工具&#xff0c;用于保護共享資源&#xff0c;防止多線程同時訪問導致的數據競爭&#xff08;Data Race&#xff09;問題。 以下是C中互斥鎖的核心用法和示例&#xff1a; 一、基本互斥鎖 std::mut…

Jsoup與HtmlUnit:兩大Java爬蟲工具對比解析

Jsoup&#xff1a;HTML解析利器 定位&#xff1a;專注HTML解析的輕量級庫&#xff08;也就是快&#xff0c;但動態頁面無法抓取&#xff09; 核心能力&#xff1a; DOM樹解析與CSS選擇器查詢 HTML凈化與格式化 支持元素遍歷與屬性提取 應用場景&#xff1a;靜態頁面數據抽…

小白成長之路-vim編輯

文章目錄 Vim一、命令模式二、插入模式3.a:進入插入模式&#xff0c;在當前光標的后一個字符插入![在這里插入圖片描述](https://i-blog.csdnimg.cn/direct/fd293c3832ed49e2974abfbb63eeb5bb.png)4.o: 在當前光標的下一行插入5.i:在當前光標所在字符插入&#xff0c;返回命令模…

[redis進階六]詳解redis作為緩存分布式鎖

目錄 一 什么是緩存 緩存總結板書: 二 使?Redis作為緩存 三 緩存的更新策略 1) 定期?成 2) 實時?成 四 面試重點:緩存預熱,緩存穿透,緩存雪崩 和緩存擊穿 1)緩存預熱 2)緩存穿透 3)緩存雪崩 4)緩存擊穿 五 分布式鎖 板書: 1)什么是分布式鎖 2)分布式鎖的基…

【MySQL】數據表插入數據

個人主頁&#xff1a;Guiat 歸屬專欄&#xff1a;MySQL 文章目錄 1. 插入數據概述1.1 插入數據的重要性1.2 插入數據的基本原則 2. 基本插入語句2.1 INSERT INTO語法2.2 插入多行數據2.3 不指定列名的插入2.4 插入NULL和默認值 3. 高級插入技術3.1 使用子查詢插入數據3.2 IGNOR…