6JDBC数据源实战

JDBC数据源实战

Spark SQL支持使用JDBC从关系型数据库(比如MySQL)中读取数据。读取的数据是DataFrame,可以很方便地使用Spark Core提供的各种算子进行处理。

一、JDBC的读取和写入格式

读取JDBC数据的格式

Scala版本
val jdbcDF = sqlContext.read.format("jdbc")
      .options(Map(
        "url"->"jdbc:mysql://localhost:3306/unicom",
        "user" -> "root",
        "password" -> "199037",
        "dbtable" -> "dataframe1"
      ))
      .load()
或者
val dataframe_mysql = sqlcontext.read.format("jdbc")
    .option("url", "jdbc:mysql://localhost:3306/unicom")
    .option("driver", "com.mysql.jdbc.Driver")
    .option("dbtable", "dataframe1").option("user", "root")
    .option("password", "199037")
    .load()
或者
val connectProperties=new java.util.Properties()
connectProperties.put("user","username")
connectProperties.put("password","yourpassword")
val url="jdbc:mysql://localhost:3306/unicom"

val df=spark.read.jdbc(url,"outDF",connectProperties) 

保存到JDBC的格式

Scala版本
import java.util.Properties
import org.apache.spark.sql.SaveMode
val connectProperties = new Properties()
    connectProperties.put("user", "root")
    connectProperties.put("password", "199037")
    val mysqlDriverUrl = "jdbc:mysql://localhost:3306/unicom?useUnicode=true&characterEncoding=utf-8"

    outDF.write.mode(SaveMode.Append).jdbc(mysqlDriverUrl, "outDF", connectProperties)

二、实例讲解

案例:查询分数为优秀的学生信息

import java.util.Properties

import org.apache.spark.sql.functions._
import org.apache.spark.sql.{SQLContext, SaveMode}
import org.apache.spark.{SparkConf, SparkContext}

/**
  * Created by cuiyufei on 2018/3/8.
  * jdbc实战
  */
object sparkStudy {
  /**
    * 将学生基本信息和学生成绩信息合并,并找出优秀的学生(成绩大于85)
   */
  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("dataframeOperation").setMaster("local")
    val sc = new SparkContext(conf)
    val sqlContext = new SQLContext(sc)
    //学生基本信息
    val stuInfoDF = sqlContext.read.format("jdbc")
      .options(Map(
        "url"->"jdbc:mysql://localhost:3306/unicom",
        "user" -> "root",
        "password" -> "199037",
        "dbtable" -> "student_info"
      ))
      .load()
    //学生成绩信息
    val stuScoreDF = sqlContext.read.format("jdbc")
      .options(Map(
        "url"->"jdbc:mysql://localhost:3306/unicom",
        "user" -> "root",
        "password" -> "199037",
        "dbtable" -> "student_score"
      ))
      .load()

    //去除分数大于85的学生的信息
    val outDF = stuInfoDF.join(stuScoreDF,"name").filter("score>85")
    //将数据写入mysq以方便观察
    val connectProperties = new Properties()
    connectProperties.put("user", "root")
    connectProperties.put("password", "199037")
    val mysqlDriverUrl = "jdbc:mysql://localhost:3306/unicom?useUnicode=true&characterEncoding=utf-8"

    outDF.write.mode(SaveMode.Append).jdbc(mysqlDriverUrl, "outDF", connectProperties)

  }

}

学生基本信息,如下图所示:
![](E:\文档\markdown\jdbc实战\1.pn
学生成绩信息,如下图所示:
这里写图片描述
优秀学生信息,最后的结果信息如下图所示:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yiluohan0307

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值