如何開發SparkSQL項目?

前言

Spark是企業中用的比較多的大數據計算框架,它主要由 SparkCore、SparkSQL、SparkStreaming 這三個模塊組成,實時計算主要使用 SparkStreaming,離線部分的數據處理則主要使用SparkSQL。開發 SparkSQL 程序的一般流程是:讀取 HDFS 上的文件 => 裝換成 RDD => 註冊成臨時表 => 調用 SparkSQL 的 API 編寫 spark sql 查詢語句進行計算 => 將結果存入 mysql 數據庫。

一、開發環境搭建

可以使用 IDEA 或 Scala IDE,以 IDEA 爲例:

PS:建議大家使用 IDEA,之前博主下載使用過 ScalaIDE,寫代碼的時候都沒法自動導包,影響開發效率。

1. 下載 IDEA

下載地址:https://www.jetbrains.com/idea/download/#section=windows
在這裏插入圖片描述

2. 下載Scala

下載地址:https://www.scala-lang.org/download/all.html
博主用的版本是2.11.8
在這裏插入圖片描述

3. IDEA上安裝Scala插件

File => Settings => Plugins => 右側搜索框輸入Scala => 查詢出的結果點擊 Install
(博主是因爲已經安裝過了所以纔會出現 Installed,沒安裝過的那個按鈕應該是像下圖中的綠色的按鈕那樣)
在這裏插入圖片描述

4. 創建Maven項目

創建Maven項目:File => new => Project => Maven Project => Next => Next => Finish
在這裏插入圖片描述

5. 在library中添加Scala的SDK

默認會有一個 Java 的 SDK,因爲我們要使用 Scala 語言來寫 Spark 項目,所以還要添加一個 Scala SDK。

File => Project Structure => Project Settings => Libraries => + => Scala SDK => Browse => 選中下載好的 scala所在的目錄 => 點擊OK
在這裏插入圖片描述
就會發現我們的 External Libraries 下多了一個 Scala SDK,然後我們就可以在項目中右擊創建 Scala 類了

在這裏插入圖片描述
右擊 => New => Scala Class => 選擇Object,輸入類名 => 確定
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

二、代碼部分

1. pom依賴

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <scala.version>2.11.8</scala.version>
    <spark.version>2.1.0</spark.version>
    <encoding>UTF-8</encoding>
</properties>

<dependencies>
    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>${scala.version}</version>
    </dependency>

    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId>
        <version>${spark.version}</version>
    </dependency>

    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.11</artifactId>
        <version>${spark.version}</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.25</version>
    </dependency>
</dependencies>

2. 模擬數據文件

1 王根基 18
2 張三 23
3 李四 78
4 二狗 23
5 大帥 43
6 小王 28
7 麻子 88
8 小劉 45

3. spark代碼

import org.apache.log4j.{Level, Logger}
import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession

object Demo {
  def main(args: Array[String]): Unit = {
    // 下面這行代碼是設置Hadoop的Home目錄,在Hadoop的Home目錄的bin目錄中需要放一個winUtil工具
    // 不添加的話在運行代碼的過程中,會拋出一個異常,雖然不影響程序向下執行,但是看着不舒服,可以不寫
    System.setProperty("hadoop.home.dir", "F:/hadoop-2.7.3")

    // 設置Spark打印日誌的級別,把他設爲ERROR級別,避免運行過程中大量的日誌覆蓋程序的運行結果,可以不寫
    Logger.getLogger("org.apache.spark").setLevel(Level.ERROR)

    // 創建SparkConf
    val conf = new SparkConf()
    conf.setAppName("demo2")
    conf.setMaster("local")

    // 創建SparkSession
    val spark = SparkSession.builder().config(conf).getOrCreate()
    val sc = spark.sparkContext

    spark.sparkContext.setLogLevel("WARN")

    // 從指定的文件中讀取數據,生成對應的RDD
    val lineRDD = sc.textFile("e:/student.txt").map(_.split(" "))

    // 將RDD和case class關聯
    val studentRDD = lineRDD.map(x=>Student(x(0).toInt, x(1), x(2).toInt))

    // 生成DataFrame,通過RDD生成DF,導入隱式轉換
    import spark.sqlContext.implicits._
    val studentDF = studentRDD.toDF()

    // 註冊表視圖
    studentDF.createOrReplaceTempView("student")

    // 執行SQL
    spark.sql("select * from student").show

    spark.stop
  }
}

// case class 一定放在外面
case class Student(stuID: Int, stuName: String, stuAge: Int)

4. 右擊 Run 運行代碼即可

在這裏插入圖片描述

關注我的微信公衆號(曲健磊的個人隨筆),獲取更多幹貨:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章