SparkSQL操作Mysql

前面的課程我們學習了如何從csv文件中讀入數據,這相當于是對csv這種類型的數據的操作。那么接下來,我們一起看看,如何寫Spark程序來操作mysql數據庫。先來給大家介紹一下我們這節課的主要學習內容

(1)安裝mysql數據庫

(2)寫Spark程序連接mysql數據庫并進行讀寫操作。

準備mysql環境

我們計劃在hadoop001這臺設備上安裝mysql服務器,(當然也可以重新使用一臺全新的虛擬機)。

以下是具體步驟:

  1. 使用finalshell連接hadoop001.
  2. 查看是否已安裝MySQL。命令是: rpm -qa|grep mariadb

若已安裝,需要先做卸載MySQL的操作命令是:rpm -e --nodeps mariadb-libs

  1. 把mysql的安裝包上傳到虛擬機。

  1. 進入/opt/software/目錄,解壓上傳的.tar文件。

cd /opt/software

解壓文件

tar -xf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar

得到的效果如下

  1. 安裝工具包

yum install -y ??perl ??perl-Data-Dumper ??perl-Digest-MD5 ??net-tools libaio

如果安裝成功,或者顯示以下內容,即可繼續安裝步驟:

軟件包 libaio-0.3.109-13.el7.x86_64 已安裝并且是最新版本

無須任何處理

6.安裝mysql。依次輸入以下5條命令:

rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm

rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm

rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm

命令說明:

rpm -ivh 是 Linux 中用于安裝 RPM(Red Hat Package Manager)軟件包的命令。具體來說,rpm -ivh 中的每個選項都有特定的含義:

rpm:RPM 包管理工具,用于安裝、查詢、驗證、更新和刪除軟件包。 ?

-i:表示安裝(install)軟件包。 ?

-v:表示顯示詳細(verbose)信息,提供更多安裝過程中的輸出信息。 ?

-h:表示在安裝過程中顯示進度條,以 # 符號表示安裝進度。

  1. 初始化數據庫

使用的命令是: mysqld --initialize --user=mysql

  1. 查看臨時密碼

安裝完成之后,它會在一個日志文件中保存臨時密碼,通過cat命令來查看這個密碼。具體的操作是:cat /var/log/mysqld.log

將臨時密碼復制,或者暫時存到某處

  1. 啟動MySQL服務。對應的命令是:systemctl start mysqld
  2. 登錄MySQL數據庫。對應的命令是:mysql -uroot -p
  3. 輸入臨時密碼。此時會要求輸入密碼。

Enter password: 臨時密碼。注意,在輸入密碼的過程中,密碼并不可見。

  1. 登陸成功后,修改密碼為000000。初始密碼太難記了,我們先修改一下密碼。對應的命令如下:

mysql> set password = password("000000");

  1. 使root允許任意ip連接

mysql> update mysql.user set host='%' where user='root';

mysql> flush privileges;

  1. 查看已有的數據庫。通過命令:show databases;
  2. 創建數據庫和表
  3. 接下來,我們去創建一個新的數據庫,數據表,并插入一條數據。

    參考代碼如下

    -- 創建數據庫

    CREATE DATABASE spark;
    -- 使用數據庫

    USE spark;

    -- 創建表

    create table person(id int, name char(20), age int);

    -- 插入示例數據

    insert into person values(1, 'jam', 20), (2,'judi', 21);

    -- 查看所有數據
    select * from person;

    -- 退出
    quit

?

提醒:use spark;的作用是使用當前數據庫;

Spark連接MySQL數據庫
  1. 新建項目,或者使用之前的項目也可以。
  2. 修改pom.xml文件。

【教師講解這個三個依賴的作用,強調可以刪除spark-core這個包】

補充三個依賴:

(1)scala-library 是 Scala 語言的基礎庫,是編寫 Scala 程序的必要條件。

(2)spark-sql_2.12 提供了 Spark SQL 的功能,用于高效的數據處理和分析。

(3)mysql-connector-java 提供了與 MySQL 數據庫交互的能力。

<dependency>

????????????<groupId>org.scala-lang</groupId>

????????????<artifactId>scala-library</artifactId>

????????????<version>2.12.15</version>

????????</dependency>

????????<dependency>

????????????<groupId>org.apache.spark</groupId>

????????????<artifactId>spark-sql_2.12</artifactId>

????????????<version>3.3.1</version>

?????????</dependency>

????????<dependency>

????????????<groupId>mysql</groupId>

????????????<artifactId>mysql-connector-java</artifactId>

????????????<version>8.0.33</version>

????????</dependency>

?

?

請注意,這里并沒沒有單獨添加spark_core的依賴,因為在spark-sql中已經包含了spark_core。

  1. 寫Spark程序連接mysql
  2. 核心步驟:

    1. 創建Properties對象,設置數據庫的用戶名和密碼
    2. 使用spark.read.jbdc方法,連接數據庫
    3. import org.apache.spark.sql.SparkSessionobject SparkSQL01 {/*sparksql DataFrame:一種分布式的數據集,類似于二維表格(mysql 數據庫中的數據表)1.讀入現成的結構化數據:csv 數據庫  json2.通過RDD轉換而來DataFrame:1.調用API來實現相關功能2.調用SQL語句來實現相關功能*/def main(args: Array[String]): Unit = {val spark = SparkSession.builder().appName("SparkSQL01").master("local[*]").getOrCreate()//讀入文件val df = spark.read.option("header", "true").csv("input/ecommerce_data.csv")
      //
      //    //選出quantity > 5 的記錄
      //    val df1 = df.filter(df("quantity") > 5)//    df1.show()//選出 quantity > 5 的記錄:使用SQL來實現相關功能//1.生成一個臨時數據表df.createOrReplaceTempView("ecommerce")//2.執行SQL語句val df2 = spark.sql("select * from t1 where quantity > 5")df2.show()}}
      

    4. park添加數據到mysql

      前面演示了數據的查詢,現在來看看添加數據到mysql。

      【教師講

      import org.apache.spark.sql.SparkSessionimport java.util.Propertiesobject SparkSQL02 {//連接hadoop100上的mysql數據庫,讀出spark數據庫中的person表中的內容def main(args: Array[String]): Unit = {val spark =SparkSession.builder().appName("SparkSQL02").master("local[*]").getOrCreate()//創建一個properties對象,用來儲存mysql的連接信息val prop = new Properties()prop.setProperty("user","root")prop.setProperty("password","000000")//添加一條數據到數據庫val data = Seq((3,"zhangsan",30),(4,"lisi",40),(5,"wangwu",50))val df1 = spark.createDataFrame(data).toDF("id","name","age")df1.write.mode("append").jdbc("jdbc:mysql://hadoop100:3306/spark","person",prop)//讀取mysql數據庫中的數據val df  = spark.read.jdbc("jdbc:mysql://hadoop100:3306/spark","person",prop)df.show()}}

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

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

相關文章

語言學中的對象語言與元語言 | 概念 / 區別 / 實例分析

注&#xff1a;英文引文&#xff0c;機翻未校。 語言學中的“對象語言”和“元語言” 劉福長 現代外語 1989年第3期&#xff08;總第45期&#xff09; 在閱讀語言學著作時&#xff0c;我們有時會遇到這樣兩個術語&#xff1a;對象語言&#xff08;object language&#xff0…

livenessProbe 和 readinessProbe 最佳實踐

在 Kubernetes 中&#xff0c;livenessProbe 和 readinessProbe 是確保應用高可用性的關鍵機制&#xff0c;但配置不當可能導致應用頻繁重啟或流量中斷。以下是配置這兩個探針的最佳實踐&#xff1a; 1. 核心區別與作用 探針類型目的失敗后果livenessProbe檢測應用是否 存活&…

集成管理工具Gitlab

GitLab 是一個功能強大的開源代碼托管和協作平臺&#xff0c;集成 GitLab 可以顯著提升團隊的開發效率。下面我將為你介紹如何集成 GitLab&#xff0c;包括安裝配置和基本使用流程。 一、GitLab 安裝與配置 GitLab 有多種安裝方式&#xff0c;推薦使用官方 Omnibus 包安裝&am…

Electron-Vue3、Electron-React、Electron-Angular打造輿情監控系統項目

Electron是一個跨平臺的桌面應用開發框架&#xff0c;可以讓我們用html css js的技術開發跨平臺桌面上可以安裝的軟件。視頻詳解: Electron教程 ElectronVue跨平臺桌面軟件開發教程-2024年更新&#xff08;大地老師&#xff09; 從Electron環境搭建開始到手把手教你調試、Elect…

08.webgl_buffergeometry_attributes_none ,three官方示例+編輯器+AI快速學習

本實例主要講解內容 這個Three.js示例展示了無屬性幾何體渲染技術&#xff0c;通過WebGL 2的gl_VertexID特性和偽隨機數生成算法&#xff0c;在著色器中動態計算頂點位置和顏色&#xff0c;而不需要在CPU端預先定義幾何體數據。 核心技術包括&#xff1a; WebGL 2的頂點ID特…

Ubuntu 22.04搭建OpenStreeMap地址解析服務(保姆級教程)

1.數據準備 1.1.全球數據 下載地址&#xff1a;https://planet.openstreetmap.org/ 1.2.特定區域的數據 下載地址&#xff1a;Geofabrik Download Server 2.安裝必要的軟件包 2.1.更新系統軟件包 sudo apt updatesudo apt upgrade 2.2.安裝所需要的軟件包 執行下面的命…

Ubuntu 22.04.5 LTS上部署Docker及相關優化

以下是在Ubuntu 22.04.5 LTS上部署Docker及相關優化的步驟&#xff1a; 安裝Docker 更新系統&#xff1a;在安裝Docker之前&#xff0c;先確保系統是最新的&#xff0c;執行以下命令&#xff1a;sudo apt update sudo apt upgrade -y安裝依賴包&#xff1a;安裝一些必要的依賴…

React -> AI組件 -> 調用Ollama模型, qwen3:1.7B非常聰明

使用 React 搭建一個現代化的聊天界面&#xff0c;支持與 Ollama 本地部署的大語言模型進行多輪對話。界面清爽、功能完整&#xff0c;支持 Markdown 渲染、代碼高亮、<think> 隱藏思考標簽、流式漸進反饋、暗黑模式適配等特性。 &#x1f9e9; 核心功能亮點 ? 模型選擇…

vue2/3 中使用 @vue-office/docx 在網頁中預覽(docx、excel、pdf)文件

1. 安裝依賴&#xff1a; #docx文檔預覽組件npm install vue-office/docx vue-demi0.14.6#excel文檔預覽組件npm install vue-office/excel vue-demi0.14.6#pdf文檔預覽組件npm install vue-office/pdf vue-demi0.14.6 vue2.6版本或以下還需要額外安裝 vue/composition-api …

【應用密碼學】實驗五 公鑰密碼2——ECC

一、實驗要求與目的 1.復習CCC基本概念&#xff0c;并根據實驗平臺提供的資料完成驗證性實驗。 2.編程練習&#xff1a;以書上例題小模數p為例編程實現ECC的基本運算規則。 二、實驗內容與步驟記錄&#xff08;只記錄關鍵步驟與結果&#xff0c;可截圖&#xff0c;但注意排版…

rust-candle學習筆記9-使用tokenizers加載qwen3分詞,使用分詞器處理文本

參考&#xff1a;about-pytorch&#xff0c; about-tokenizers 在魔搭社區鏈接下載qwen3的tokenizer.json文件 添加依賴庫&#xff1a; cargo add tokenizers tokenizers庫初體驗&#xff1a; use tokenizers::tokenizer::{self, Result, Tokenizer};fn main() -> Resu…

【MySQL】存儲引擎 - ARCHIVE、BLACKHOLE、MERGE詳解

&#x1f4e2;博客主頁&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客倉庫&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;歡迎點贊 &#x1f44d; 收藏 ?留言 &#x1f4dd; 如有錯誤敬請指正&#xff01; &…

5.Redission

5.1 前文鎖問題 基于 setnx 實現的分布式鎖存在下面的問題&#xff1a; 重入問題&#xff1a;重入問題是指 獲得鎖的線程可以再次進入到相同的鎖的代碼塊中&#xff0c;可重入鎖的意義在于防止死鎖&#xff0c;比如 HashTable 這樣的代碼中&#xff0c;他的方法都是使用 sync…

C語言主要標準版本的演進與核心區別的對比分析

以下是C語言主要標準版本的演進與核心區別的對比分析 K&R C&#xff08;1978年&#xff09; 定位?&#xff1a;非標準化的原始版本&#xff0c;由Brian Kernighan和Dennis Ritchie定義 特性?&#xff1a; 基礎語法&#xff1a;函數聲明無參數列表&#xff08;如int func…

【C++設計模式之Template Method Pattern】

C設計模式之Template Method Pattern 模式定義核心思想動機(Motivation)結構&#xff08;Structure&#xff09;實現步驟應用場景要點總結 模式定義 模式定義&#xff1a; 定義一個操作中的算法的骨架(穩定)&#xff0c;而將一些步驟延遲(變化)到子類中。Template Method使得子…

【動態導通電阻】p-GaN HEMTs正向和反向導通下的動態導通電阻

2024 年,浙江大學的 Zonglun Xie 等人基于多組雙脈沖測試方法,研究了兩種不同技術的商用 p-GaN 柵極 HEMTs 在正向和反向導通模式以及硬開關和軟開關條件下的動態導通電阻(RON)特性。實驗結果表明,對于肖特基型 p-GaN 柵極 HEMTs,反向導通時動態 RON 比正向導通高 3%-5%;…

PDFMathTranslate:科學 PDF 文件翻譯及雙語對照工具

PDFMathTranslate&#xff1a;科學 PDF 文件翻譯及雙語對照工具 在科研和學習過程中&#xff0c;我們經常會遇到大量的英文 PDF 文獻&#xff0c;翻譯這些文獻成為了一項繁瑣且耗時的工作。PDFMathTranslate 是一款強大的科學 PDF 文件翻譯及雙語對照工具&#xff0c;它能夠保…

Flutter PIP 插件 ---- 為iOS 重構PipController, Demo界面,更好的體驗

接上文 Flutter PIP 插件 ---- 新增PipActivity&#xff0c;Android 11以下支持自動進入PIP Mode 項目地址 PIP&#xff0c; pub.dev也已經同步發布 pip 0.0.3&#xff0c;你的加星和點贊&#xff0c;將是我繼續改進最大的動力 在之前的界面設計中&#xff0c;還原動畫等體驗一…

【Ansible】之inventory主機清單

前言 本篇博客主要解釋Ansible主機清單的相關配置知識 一、inventory 主機清單 Inventory支持對主機進行分組&#xff0c;每個組內可以定義多個主機&#xff0c;每個主機都可以定義在任何一個或多個主機組內。 如果是名稱類似的主機&#xff0c;可以使用列表的方式表示各個主機…

基于幾何布朗運動的股價預測模型構建與分析

基于幾何布朗運動的股價預測模型構建與分析 摘要 本文建立基于幾何布朗運動的股價預測模型&#xff0c;結合極大似然估計與蒙特卡洛模擬&#xff0c;推導股價條件概率密度函數并構建動態預測區間。實證分析顯示模型在標普500指數預測中取得89%的覆蓋概率&#xff0c;波動率估…