數據加載與保存

通用方式?

SparkSQL提供了通用的數據加載方式,使用spark.read.loa方法,并可通過format指定數據類型(如csv、jdbc、json、orc、parquet、textFile)。

load方法后需傳入數據路徑(針對csv、jdbc、json、orc、parquet、textFile格式)。

option方法用于設置特定格式的參數,如jdbc的url、user、password、dbtable。

特定格式加載?

Parquet?:Spark SQL的默認數據源,無需指定format即可載。

JSON?:Spark SQL能自動推測JSON數據集結構,使用spark.read.json(path)加載。注意,每行應為一個JSON串。

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

val peopleDF = spark.read.json(path)

查詢數據:可以通過SQL語句查詢JSON數據。

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

CSV?:需指定format為csv,并可通過option設置分隔符、是否推斷schema、是否包含表頭等信息。

MySQL?:通過JDBC從關系型數據庫讀取數據,使用spark.read.format("jdbc").option(...)方式,并傳入數據庫連接信息。

數據保存

通用方式?

使用df.write.save方法保存數據,同樣可通過format指定數據類型。

save方法后需傳入保存路徑(針對csv、orc、parquet、textFile格式)。

option方法用于設置特定格式的參數。

保存操作可使用SaveMode來指明如何處理數據,如覆蓋(overwrite)、追加(append)等,通過mode方法設置。

特定格式保存?

與加載類似,Parquet、JSON、CSV等格式均可通過指定format進行保存。

MySQL等關系型數據庫的寫入也通過JDBC實現,需指定format為jdbc,并傳入數據庫連接信息及表名。

注意事項

在處理JSON數據時,需確保文件格式符合Spark的要求,即每行一個JSON串。

在讀取CSV文件時,可通過設置option來指定分隔符、是否推斷schema等信息,以便正確解析文件內容。

在通過JDBC連接數據庫時,需確保數據庫驅動已正確導入,并正確配置數據庫連接信息。

在保存數據時,需根據實際需求選擇合適的SaveMode,以避免數據覆蓋或丟失。

Spark SQLHive的集成

Spark SQL可以編譯時包含Hive支持,從而提供對Hive表訪問、UDF(用戶自定義函數)、Hive查詢語言(HQL)等特性的支持。在使用時,無需事先安裝Hive,但最好在編譯Spark SQL時引入Hive支持。

IDEA通過JDBC對MySQL進行操作:

讀取數據

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()

?寫入數據

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()

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

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

相關文章

7 編譯型語言、解釋型語言與混合型語言的深度解析:以 C、Java、Python 為例

在編程領域,語言的執行方式是其設計哲學的核心體現,直接影響著性能、可移植性和開發效率。本文將深入剖析編譯型語言(以 C 語言為例)、解釋型語言(以 Python 為例)和混合型語言(以 Java 為例&am…

Edge瀏覽器安卓版流暢度與廣告攔截功能評測【不卡還凈】

安卓設備上使用瀏覽器的體驗,很大程度取決于兩個方面。一個是滑動和頁面切換時的反應速度,另一個是廣告干擾的多少。Edge瀏覽器的安卓版本在這兩方面的表現比較穩定,適合日常使用和內容瀏覽。 先看流暢度。Edge在中端和高端機型上啟動速度快&…

智能云圖庫-12-DDD重構

本節重點? 之前我們已經完成了本項目的功能開發。由于本項目功能豐富、代碼量大,如果是在企業中維護開發的項目,傳統的 MVC 架構可能會讓后續的開發協作越來越困難。所以本節魚皮要從 0 帶大家學習一種新的架構設計模式 —— DDD 領域驅動設計。 大綱…

量子安全郵件系統 —— 郵件回溯密鑰銷毀機制

這里寫目錄標題 量子安全郵件系統 —— 郵件回溯密鑰銷毀機制一、項目背景與簡介二、理論基礎2.1 密鑰銷毀的重要性2.2 時間衰減與回溯銷毀2.3 安全日志與報警機制三、系統架構設計3.1 模塊劃分3.2 系統架構圖(Mermaid示意圖)四、關鍵算法與實現流程4.1 密鑰生成與存儲4.2 郵…

個人博客系統后端 - 用戶信息管理功能實現指南(上)

本文記錄了如何實現用獲取戶信息,用戶信息更新,用戶頭像上傳三大基礎功能 先上接口實現截圖: 一、項目結構概覽 先介紹一下 個人博客系統采用了標準的 Spring Boot 項目結構,用戶功能相關的文件主要分布在以下幾個目錄&#xff1a…

趣味編程之分布式系統:負載均衡的“雨露均沾“藝術

#此篇文章由Deepseek大力支持😋 凌晨三點,西二旗某火鍋店后廚—— “羊肉卷走3號桌!” “肥牛卷去7號!” “蝦滑優先給VIP區!” 我蹲在傳菜口的監控屏幕前,看著機器人服務生們忙而不亂地穿梭。突然間&am…

Linux——信號(1)信號的產生

我們在講進程的多種狀態時提到過,一個進程的退出有三種情況:正常退出,結果出錯退出(代碼也執行完了),異常終止退出(代碼未執行完),其中最后一種退出相當于進程在運行時&a…

LeetCode 2919 使數組變美的最小增量運算數

動態規劃解題:最小操作次數使數組變為美麗數組 問題描述 給定一個下標從0開始、長度為n的整數數組nums和一個整數k。你可以對數組中的任意一個元素進行加1操作,操作次數不限。如果數組中任意長度大于或等于3的子數組的最大值都大于或等于k,…

計算生物學在中國的發展情況?

李升偉 整理 計算生物學在中國的發展呈現出多方面積極態勢,具體表現如下: 發展概述: 上海發布了醫用AI發展的專項方案,特別強調了腦科學與計算生物學的前沿領域。這表明政府有意推動該領域的技術進步和技術合作平臺建設。國內的…

Linux之文件內容顯示(cat、grep、cut、sort、uniq、tr)

🎯 本文專欄:Linux 🚀 作者主頁:小度愛學習 1、瀏覽普通文件內容 命令常用選項說明cat-n 對輸出內容中的所有行標注行號;-b 對輸出內容中的非空行標注行號。查看文本文件的內容head-num 指定需要顯示文件num行的內容。…

3DS 轉 STL 全攻略:傳統工具與迪威模型網在線轉換深度解析

在 3D 建模與 3D 打印的技術領域中,常常會遇到需要將不同格式的文件進行轉換的情況。其中,把 3DS 文件轉換為 STL 格式是較為常見的操作。3DS 文件作為一種舊版 Autodesk 3D Studio 使用的 3D 圖像格式,存儲著豐富的信息,包括網格…

IoT FEM射頻前端模組芯片(2.4G PA)三伍微電子GSR2401 兼容替代RFX2401

型號:GSR2401應用:適用于藍牙(BT)、ZigBee及物聯網(IoT)設備 功能:集成了功率放大器(PA)、開關(Switch)和低噪聲放大器(LNA&#xff…

Missashe考研日記-day22

Missashe考研日記-day22 1 專業課408 學習時間:3h學習內容: 先把昨天關于進程調度的課后習題做了,然后花了挺長時間預習OS的最最最最重要的一部分——同步與互斥問題,這部分大二上課的時候就懵懵懂懂的,得認真再領悟…

2025年最新Web安全(面試題)

活動發起人小虛竹 想對你說: 這是一個以寫作博客為目的的創作活動,旨在鼓勵大學生博主們挖掘自己的創作潛能,展現自己的寫作才華。如果你是一位熱愛寫作的、想要展現自己創作才華的小伙伴,那么,快來參加吧&#xff01…

Qt QML - qmldir使用方法詳解

以實際例子看qmldir的使用 1.搞一個qmldir2.讓QML找到你的qmldir (重點).pro 工程文件QQmlApplicationEngine加載主QML處 3.用起來你的模塊 qmldir是Qt QML模塊化的基石,其設計初衷是為解決QML文件的組織、復用和依賴管理問題,。只需要在每個…

# Shell腳本參數設計規范(DeepSeek指導)

Shell腳本參數設計規范(DeepSeek指導) 文章目錄 Shell腳本參數設計規范(DeepSeek指導)A 我問:Q DeepSeek回答:**命令行參數表示規范****標準化表示示例**情況1:必選選項參數值情況2:…

MQTT協議:IoT通信的輕量級選手

文章總結(幫你們節約時間) MQTT協議是一種輕量級的發布/訂閱通信協議。MQTT通信包括連接建立、訂閱、發布和斷開等過程。MQTT基于TCP/IP,其通信過程涉及多種控制包和數據包。ESP32S3可以通過MQTT協議接收消息來控制IO9引腳上的LED。 想象一…

數據結構——反射、枚舉以及lambda表達式

1. 反射 Java的反射(reflection)機制是在運?時檢查、訪問和修改類、接?、字段和?法的機制;這種動態獲取信息以及動態調?對象?法的功能稱為java語?的反射(reflection)機制。 用途 1. 框架開發 2. 注解處理 3.…

C語言教程(十):C 語言函數詳解

一、引言 在 C 語言中,函數是一組執行特定任務的代碼塊。通過將復雜的程序邏輯劃分為多個函數,不僅能提高代碼的可讀性、可維護性,還便于代碼的復用。無論是簡單的數學計算,還是復雜的系統操作,函數都發揮著核心作用。…

力扣面試150題--有效的字母異位詞和字母異位詞分組

Day 24 題目描述 思路 初次思路:如果兩個字符串為異位詞,說明它們長度相同并且字母出現的次數相同,于是有以下做法: 定義一個map,來保存s中每個字符的出現次數處理特殊情況,如果長度不同,直接…