Spark-Sql快速入门系列(4) | JDBC读写数据

一.JDBC

  • Spark SQL 也支持使用 JDBC 从其他的数据库中读取数据. JDBC 数据源比使用 JdbcRDD更爽一些. 这是因为返回的结果直接就是一个 DataFrame, DataFrame更加容易被处理或者与其他的数据源进行 join.
  • Spark SQL 可以通过 JDBC 从关系型数据库中读取数据的方式创建 DataFrame,通过对DataFrame一系列的计算后,还可以将数据再写回关系型数据库中。
  • 注意: 如果想在spark-shell操作 jdbc, 需要把相关的 jdbc 驱动 copy 到 jars 目录下.
    导入依赖:
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.27</version>
</dependency>

从 jdbc 读数据

通用写法

import org.apache.spark.sql.SparkSession

object JDBCRead {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()
      .master("local[*]")
      .appName("JDBCRead")
      .getOrCreate()
    import  spark.implicits._

    val url = "jdbc:mysql://hadoop102:3306/sparksql"
    val user = "root"
    val pw = "root"

    val df = spark.read
      .option("url", url)
      .option("user", user)
      .option("password", pw)
      .option("dbtable", "user")
      .format("jdbc").load()

    df.show()
    spark.close()
  }
}

专用写法

import java.util.Properties

import org.apache.spark.sql.SparkSession

object JDBCRead1 {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()
      .master("local[*]")
      .appName("JDBCRead")
      .getOrCreate()

    val url = "jdbc:mysql://hadoop102:3306/sparksql"
    val user = "root"
    val pw = "root"

    val props = new Properties()
    props.put("user",user)
    props.put("password",pw)
    val df = spark.read
       .jdbc(url,"user",props)

    df.show()
    spark.close()

  }

}

向 jdbc 写入数据

通用写法

import org.apache.spark.sql.{SaveMode, SparkSession}

object JDBCWrite {
    def main(args: Array[String]): Unit = {
      val spark = SparkSession.builder()
        .master("local[*]")
        .appName("JDBCRead")
        .getOrCreate()

      val df = spark.read.json("D:\\idea\\spark-sql\\input\\user.json")

      val url = "jdbc:mysql://hadoop102:3306/sparksql"
      val user = "root"
      val pw = "root"

     //写到jdbc中
      df.write
          .format("jdbc")
          .option("url",url)
          .option("user",user)
          .option("password",pw)
          .option("dbtable","user1602")
       // .mode("append")
        .mode(SaveMode.Overwrite)
          .save()


      spark.close()

    }
}

专用写法

import java.util.Properties

import org.apache.spark.sql.{SaveMode, SparkSession}

object JDBCWrite1 {
    def main(args: Array[String]): Unit = {
      val spark = SparkSession.builder()
        .master("local[*]")
        .appName("JDBCRead")
        .getOrCreate()

      val df = spark.read.json("D:\\idea\\spark-sql\\input\\user.json")

      val url = "jdbc:mysql://hadoop102:3306/sparksql"
      val user = "root"
      val pw = "root"

     //写到jdbc中
     val props = new Properties()
      props.put("user",user)
      props.put("password",pw)
      df.write
          .jdbc(url,"user1603",props)

      spark.close()

    }

}

猜你喜欢

转载自blog.csdn.net/qq_46548855/article/details/108269870