Spark-SQL核心編程3

數據加載與保存

通用方式:

????????SparkSQL 提供了通用的保存數據和數據加載的方式。這里的通用指的是使用相同的API,根據不同的參數讀取和保存不同格式的數據,SparkSQL 默認讀取和保存的文件格式為parquet

?

數據加載方法

????????spark.read.load 是加載數據的通用方法。如果讀取不同格式的數據,可以對不同的數據格式進行設定。

????????spark.read.format("…")[.option("…")].load("…")

三種加載數據的方法:

????????使用?option?參數加載數據,在"jdbc"格式下需要傳入 JDBC 相應參數,url、user、password 和 dbtable
????????????????????????(適用于需要傳入數據庫連接信息的情況。)

????????使用?load方法加載數據,在"csv"、"jdbc"、"json"、"orc"、"parquet"和"textFile"格式下需要傳入加載數據的路徑。

????????????????????????(適用于指定數據路徑和類型的情況。)

?????????使用format?加載數據,指定加載的數據類型,包括"csv"、"jdbc"、"json"、"orc"、"parquet"和

"textFile"。

前面都是使用 read API 先把文件加載到 DataFrame 然后再查詢,其實,我們也可以直接在文件上進行查詢: 文件格式.'文件路徑'

spark.sql("select * from json.’ Spark-SQL/input/user.json’").show

?

數據保存方法

主要介紹了兩種保存數據的方法,一種是df write.save的通用方法,另一種是通過指定format、option和save(需要指定數據格式和保存路徑的情況)路徑來保存。

format("…"):指定保存的數據類型,包括"csv"、"jdbc"、"json"、"orc"、"parquet"和"textFile"。

save ("…"):在"csv"、"orc"、"parquet"和"textFile"格式下需要傳入保存數據的路徑。

option("…"):在"jdbc"格式下需要傳入 JDBC 相應參數,url、user、password 和 dbta

????????save mode的不同選項,如append、error、overwrite和ignore,以及它們在文件已存在時的處理方式。

?

Parquet

????????Spark SQL 的默認數據源為 Parquet 格式。Parquet 是一種能夠有效存儲嵌套數據的列式

存儲格式。

????????加載數據:

????????????????val df = spark.read.load("examples/src/main/resources/users.parquet")

????????保存數據:

????????????????var df = spark.read.json("/opt/module/data/input/people.json")

????????????????df.write.mode("append").save("/opt/module/data/output")

?

?

?

?

數據格式與數據源

默認數據源介紹了 Spark 的默認數據源,能夠存儲嵌套數據,簡化了數據操作。強調了默認數據源的便利性,通常不需要修改配置。

JSON

????????JSON數據處理

????????spark SQL自動檢測JSON數據集的結構,并將其加載為dataset。

????????可以通過 SparkSession.read.json()去加載 JSON 文件。

????????強調了spark中讀取的JSON文件每一行應為一個json串。

加載json文件

val path = "/opt/module/spark-local/people.json"

val peopleDF = spark.read.json(path)

創建臨時表

peopleDF.createOrReplaceTempView("people")

數據查詢

val resDF = spark.sql("SELECT name FROM people WHERE age BETWEEN 13 AND 19")

?

CSV 數據

?CSV 文件的讀取方法,通常用于簡單的數據導入。

Spark SQL 可以配置 CSV 文件的列表信息,讀取 CSV 文件,CSV 文件的第一行設置為

數據列。

spark.read.format("csv").option("sep",";").option("inferSchema","true")

.option("header", "true").load("data/user.csv")

?

MySQL 數據操作

連接與加載

通過 JDBC 連接 MySQL 數據庫并加載數據的方法。

強調:驅動版本與 MySQL 版本匹配的重要性。

介紹了三種加載數據的方式:使用?option?參數逐個設置連接信息。使用?options?參數在 URL 中融合連接信息。使用?spark.read.jdbc?方法直接傳入 JDBC 參數。

寫入數據

通過 JDBC 將數據寫入 MySQL 數據庫的方法。

舉例說明了如何創建 RDD 并將其轉換為 DataFrame 進行寫入操作。

強調了?save mode?在寫入操作中的應用。

1)	導入依賴
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.27</version>
</dependency>
MySQL8  <version>8.0.11</version>2)	讀取數據
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("SQL")
val spark:SparkSession = SparkSession.builder().config(sparkConf).getOrCreate()import spark.implicits._
//通用的load方式讀取spark.read.format("jdbc").option("url","jdbc:mysql://localhost:3306/system").option("driver","com.mysql.jdbc.Driver")//com.mysql.cj.jdbc.Driver.option("user","root").option("password","123456").option("dbtable","user").load().show()spark.stop()//通用的load方法的另一種形式
spark.read.format("jdbc").options(Map("url"->"jdbc:mysql://localhost:3306/system?user=root&password=123456","dbtable"->"user","driver"->"com.mysql.jdbc.Driver")).load().show()//通過JDBC
val pros :Properties = new Properties()
pros.setProperty("user","root")
pros.setProperty("password","123456")
val df :DataFrame = spark.read.jdbc("jdbc:mysql://localhost:3306/system","user",pros)
df.show()3)	寫入數據
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("SQL")
val spark:SparkSession = SparkSession.builder().config(sparkConf).getOrCreate()import spark.implicits._
val rdd: RDD[Stu] = spark.sparkContext.makeRDD(List(Stu("lisi", 20),Stu("zs", 30)))
val ds:Dataset[Stu] = rdd.toDS()ds.write.format("jdbc").option("url","jdbc:mysql://localhost:3306/system").option("driver","com.mysql.jdbc.Driver").option("user","root").option("password","123456").option("dbtable","user2").mode(SaveMode.Append).save()spark.stop()

?

Spark-SQL連接Hive

連接方式:內嵌Hive、外部Hive、Spark-SQL CLI、Spark beeline 以及代碼操作。

????????內嵌HIVE:在生產環境中幾乎不使用內嵌Hive模式。

????????外部HIVE:需要與虛擬機中的Hive相連,需下載并配置PS ML、CORE杠set SML、HDFS等文件,并修改配置文件以指向虛擬機的Have。

在虛擬機中下載以下配置文件

如果想在spark-shell中連接外部已經部署好的 Hive,需要通過以下幾個步驟:

Spark 要接管 Hive 需要把 hive-site.xml 拷貝到 conf/目錄下,并將url中的localhost改為node01

?

?

驅動放置:MySQL驅動?copy 需要放到 jars/目錄下

把 core-site.xml 和 hdfs-site.xml 拷貝到 conf/目錄下

重啟 spark-shell

?

運行Spark-SQL CLI

Spark SQL CLI 可以很方便的在本地運行 Hive 元數據服務以及從命令行執行查詢任務。在 Spark 目錄下執行如下命令啟動 Spark SQL CLI,直接執行 SQL 語句,類似于 Hive 窗口。

操作步驟:

  1. 將mysql的驅動放入jars/當中;
  2. 將hive-site.xml文件放入conf/當中;
  3. 運行bin/目錄下的spark-sql.cmd 或者打開cmd,在

D:\spark\spark-3.0.0-bin-hadoop3.2\bin當中直接運行spark-sql

可以直接運行SQL語句,如下所示:

?

運行Spark-SQL CLI的使用

????????通過spark-sql.?cmd運行,可以直接輸入MySQL語句,不需要SQL括號和雙引號。

????????驅動和配置文件的放置位置與外部Hive相同。

?

導入依賴:需要導入與Spark版本一致的依賴包(如3.0.0版本),并與Hive版本保持一致。

虛擬機運行:強調所有操作需要在虛擬機運行的情況下進行,除非使用IDEA。

代碼實現:導入必要的包。創建配置對象和SQL對象,輸入SQL語句以展示數據庫和數據表。

?

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

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

相關文章

使用HTML + CSS + JS,編寫一個臺球追分計分器

目錄 一.代碼 二.效果展示 三.該計分器的優點 一.代碼 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…

LLM小白自學筆記:1.兩種指令微調

一、LoRA 簡單來說&#xff0c;LoRA不直接調整個大模型的全部參數&#xff08;那樣太費資源&#xff09;&#xff0c;而是在模型的某些層&#xff08;通常是注意力層&#xff09;加個“旁路”——兩個小的矩陣&#xff08;低秩矩陣&#xff09;。訓練時只更新這倆小矩陣&#x…

2026《數據結構》考研復習筆記一(C++基礎知識)

C基礎知識復習 一、數據類型二、修飾符和運算符三、Lambda函數和表達式四、數學函數五、字符串六、結構體 一、數據類型 1.1基本類型 基本類型 描述 字節&#xff08;位數&#xff09; 范圍 char 字符類型&#xff0c;存儲ASCLL字符 1&#xff08;8位&#xff09; -128…

基于骨骼識別的危險動作報警分析系統

基于骨骼識別的危險動作報警分析系統 【包含內容】 【一】項目提供完整源代碼及詳細注釋 【二】系統設計思路與實現說明 【三】基于骨骼識別算法的實時危險行為預警方案 【技術棧】 ①&#xff1a;系統環境&#xff1a;Windows 10/11、macOS Ventura、Ubuntu 20.04 ②&#x…

【雙指針】四數之和(medium)

四數之和&#xff08;medium&#xff09; 題?描述&#xff1a;解法&#xff08;排序 雙指針&#xff09;算法思路&#xff1a; C 算法代碼&#xff1a;Java 算法代碼&#xff1a; 題?鏈接&#xff1a;18. 四數之和 題?描述&#xff1a; 給你?個由 n 個整數組成的數組 num…

Flask+Influxdb+grafna構建電腦性能實時監控系統

Influx下載地址&#xff0c;這里下載了以下版本influxdb-1.8.5_windows_amd64.zip 運行前需要先啟動Influx數據庫&#xff1a; 管理員方式運行cmd->F:->cd F:\influxdb\influxdb-1.8.5-1->influxd -config influxdb.conf&#xff0c;以influxdb.conf配置文件啟動數…

如何在Keil中配置國民技術N32G系列MCU開發環境

如何在Keil及Jlink中搭建國民技術N32G系列MCU開發環境 根據自己的MCU型號&#xff08;我這里的型號是N32G452REL7&#xff09;訪問國民技術官網&#xff0c;依次從N32G通用MCU-技術資源-固件和軟件-軟件開發套件&#xff0c;獲取對應MCU型號的SDK&#xff0c;也可點擊這里從網盤…

微軟承認Win11出現極端錯誤,只能強制關機或重裝系統

最近&#xff0c;不少使用 Windows 11 的用戶反映&#xff0c;在系統更新后&#xff0c;“Windows Hello”突然失效&#xff0c;原本便捷的人臉識別和PIN登錄功能統統無法使用。更糟的是&#xff0c;有人在重置系統后直接被擋在系統門外&#xff0c;這讓人不禁發問&#xff1a;…

【android bluetooth 協議分析 02】【bluetooth hal 層詳解 1】【uart 介紹】

一、什么是 UART&#xff1f; UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff09; 是一種 串行通信協議&#xff0c;它的特點是通信時不需要專門的時鐘信號&#xff08;叫做“異步”通信&#xff09;&#xff0c;常用于兩個設備之間的簡單數據通信&…

天元證券|奶粉行業結構性回暖 乳企競速全齡化、國際化

在過去幾年中&#xff0c;中國嬰配粉市場經歷了量價齊增&#xff0c;量減價增&#xff0c;量減價減的三個周期。歷經多年行業深度洗牌與競爭格局重塑&#xff0c;2024年中國嬰配粉市場回暖態勢愈發清晰可辨。 日前&#xff0c;包括中國飛鶴、澳優、健合集團在內的多家奶粉股披露…

第3.1節 調用鏈路分析簡介

調用鏈路&#xff08;Call Chain / Call Path&#xff09; 是程序在執行過程中&#xff0c;按照調用順序形成的函數、模塊或組件之間的依賴關系鏈條&#xff0c;完整記錄了從程序入口到當前執行點的動態調用路徑。它反映了代碼執行的邏輯流程&#xff0c;是分析程序行為、調試問…

System.Security.Cryptography.CryptographicException“填充無效,無法被移除。”

這個異常通常發生在以下幾種情況&#xff1a; 1.密文損壞&#xff1a;密文在傳輸或存儲過程中被篡改或損壞。 2.密鑰不匹配&#xff1a;用于解密的密鑰與加密時使用的密鑰不同。 3.填充模式不匹配&#xff1a;加密時使用的填充模式與解密時指定的填充模式不一致。 4.使用了不正…

【網絡入侵檢測】Suricata之數據包內容匹配

【作者主頁】只道當時是尋常 【專欄介紹】入侵檢測。專注網絡、主機安全&#xff0c;歡迎關注與評論。 1. 概要 本文詳細介紹了網絡入侵檢測系統&#xff08;如 Suricata&#xff09;中用于檢查數據包或流有效載荷的 Payload 關鍵字。content 用于匹配數據包內容&#xff0c;默…

Spring Boot 整合 Redis 實現點贊功能:從基礎到實踐

在當今互聯網應用開發中&#xff0c;點贊功能幾乎成為了各類內容平臺的標配。它不僅能增加用戶與內容之間的互動&#xff0c;還能直觀地反映內容的受歡迎程度。本文將詳細介紹如何使用 Spring Boot 整合 Redis 來實現一個簡單的文章點贊功能&#xff0c;讓你輕松掌握這一實用技…

openGauss DataVec + Dify,快速搭建你的智能助手平臺

在當今數字化和智能化的時代&#xff0c;大語言模型&#xff08;LLM&#xff09;的應用正以前所未有的速度改變著各個領域的工作方式和用戶體驗。Dify 作為一個開源的大語言模型應用開發平臺&#xff0c;為開發者們提供了便捷且強大的工具&#xff0c;助力構建從基礎智能體到復…

OpenLayers:extent與view extent 介紹

一、范圍的概念 1.什么是范圍&#xff1f; 在Openlayers中范圍&#xff08;Extent&#xff09;是用于表示地理空間區域的一種概念。它通常由一個數字數組構成&#xff0c;數組中的內容為&#xff1a;[最小x坐標&#xff0c;最小y坐標&#xff0c;最大x坐標&#xff0c;最大y坐…

can‘t set boot order in virtualbox

Boot order setting is ignored if UEFI is enabled https://forums.virtualbox.org/viewtopic.php?t99121 如果勾選EFI boot order就是灰色的 傳統BIOS就是可選的 然后選中任意介質&#xff0c;通過右邊的上下箭頭調節順序&#xff0c;最上面的應該是優先級最高的 然后就…

如何在 Kali 上解決使用 evil-winrm 時 Ruby Reline 的 quoting_detection_proc 警告

在使用 Kali Linux 運行 Ruby 工具&#xff08;例如 evil-winrm&#xff09;時&#xff0c;你可能會遇到以下警告&#xff1a; Warning: Remote path completions is disabled due to ruby limitation: undefined method quoting_detection_proc for module Reline這個警告會導…

工資管理系統的主要功能有哪些

工資管理系統通過自動化薪資計算、稅務處理、員工數據管理、報表生成等功能&#xff0c;極大地提升了薪資發放的效率和準確性。在傳統的人工薪資管理中&#xff0c;HR人員需要手動計算每位員工的薪資&#xff0c;并確保符合稅務要求&#xff0c;極易出錯且耗時。而現代工資管理…

C++語言程序設計——02 變量與數據類型

目錄 一、變量與數據類型&#xff08;一&#xff09;變量的數據類型&#xff08;二&#xff09;變量命名規則&#xff08;三&#xff09;定義變量&#xff08;四&#xff09;變量賦值&#xff08;五&#xff09;查看數據類型&#xff08;六&#xff09;數據類型的字節長度&…