如何开发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
如何开发SparkSQL项目?_第1张图片

2. 下载Scala

下载地址:https://www.scala-lang.org/download/all.html
博主用的版本是2.11.8
如何开发SparkSQL项目?_第2张图片

3. IDEA上安装Scala插件

File => Settings => Plugins => 右侧搜索框输入Scala => 查询出的结果点击 Install
(博主是因为已经安装过了所以才会出现 Installed,没安装过的那个按钮应该是像下图中的绿色的按钮那样)
如何开发SparkSQL项目?_第3张图片

4. 创建Maven项目

创建Maven项目:File => new => Project => Maven Project => Next => Next => Finish
如何开发SparkSQL项目?_第4张图片

5. 在library中添加Scala的SDK

默认会有一个 Java 的 SDK,因为我们要使用 Scala 语言来写 Spark 项目,所以还要添加一个 Scala SDK。

File => Project Structure => Project Settings => Libraries => + => Scala SDK => Browse => 选中下载好的 scala所在的目录 => 点击OK
如何开发SparkSQL项目?_第5张图片
就会发现我们的 External Libraries 下多了一个 Scala SDK,然后我们就可以在项目中右击创建 Scala 类了

如何开发SparkSQL项目?_第6张图片
右击 => New => Scala Class => 选择Object,输入类名 => 确定
如何开发SparkSQL项目?_第7张图片
如何开发SparkSQL项目?_第8张图片
如何开发SparkSQL项目?_第9张图片

二、代码部分

1. pom依赖

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

<dependencies>
    <dependency>
        <groupId>org.scala-langgroupId>
        <artifactId>scala-libraryartifactId>
        <version>${scala.version}version>
    dependency>

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

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

    <dependency>
        <groupId>mysqlgroupId>
        <artifactId>mysql-connector-javaartifactId>
        <version>5.1.25version>
    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 运行代码即可

如何开发SparkSQL项目?_第10张图片

关注我的微信公众号(曲健磊的个人随笔),获取更多干货:
如何开发SparkSQL项目?_第11张图片

你可能感兴趣的:(【Spark】)