Spark-SQL连接JDBC的方式及代码写法

这篇具有很好参考价值的文章主要介绍了Spark-SQL连接JDBC的方式及代码写法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章内容仅供参考!

目录

一、数据加载与保存

通用方式:

加载数据:

保存数据:

二、Parquet

加载数据:

保存数据:

三、JSON

四、CSV

 五、MySQL


一、数据加载与保存

通用方式:

SparkSQL 提供了通用的保存数据和数据加载的方式。这里的通用指的是使用相同的API,根据不同的参数读取和保存不同格式的数据,SparkSQL 默认读取和保存的文件格式为parquet

加载数据:

spark.read.load 是加载数据的通用方法。如果读取不同格式的数据,可以对不同的数据格式进行设定。

spark.read.format("…")[.option("…")].load("…")

➢ format("…"):指定加载的数据类型,包括"csv"、"jdbc"、"json"、"orc"、"parquet"和

"textFile"。

➢ load("…"):在"csv"、"jdbc"、"json"、"orc"、"parquet"和"textFile"格式下需要传入加载

数据的路径。

➢ option("…"):在"jdbc"格式下需要传入 JDBC 相应参数,url、user、password 和 dbtable

我们前面都是使用 read API 先把文件加载到 DataFrame 然后再查询,其实,我们也可以直接在文件上进行查询: 文件格式.`文件路径`

spark.sql("select * from json.’/opt/module/data/user.json’").show

保存数据:

df.write.save 是保存数据的通用方法。如果保存不同格式的数据,可以对不同的数据格式进行设定。

df.write.format("…")[.option("…")].save("…")

➢ format("…"):指定保存的数据类型,包括"csv"、"jdbc"、"json"、"orc"、"parquet"和

"textFile"。

➢ save ("…"):在"csv"、"orc"、"parquet"和"textFile"格式下需要传入保存数据的路径。

➢ option("…"):在"jdbc"格式下需要传入 JDBC 相应参数,url、user、password 和 dbtable

保存操作可以使用 SaveMode, 用来指明如何处理数据,使用 mode()方法来设置。

spark.read.jdbc,spark,学习,大数据,sql,hive

例如:df.write.mode("append").json("/opt/module/data/output")

二、Parquet

Spark SQL 的默认数据源为 Parquet 格式。Parquet 是一种能够有效存储嵌套数据的列式

存储格式。数据源为 Parquet 文件时,Spark SQL 可以方便的执行所有的操作,不需要使用 format。修改配置项 spark.sql.sources.default,可修改默认数据源格式。

加载数据:

val df = spark.read.load("examples/src/main/resources/users.parquet")

保存数据:

var df = spark.read.json("/opt/module/data/input/people.json")
df.write.mode("append").save("/opt/module/data/output")

三、JSON

Spark SQL 能够自动推测 JSON 数据集的结构,并将它加载为一个 Dataset[Row]. 可以

通过 SparkSession.read.json()去加载 JSON 文件。注意:Spark 读取的 JSON 文件不是传统的 JSON 文件,每一行都应该是一个 JSON 串

加载json文件

val path = "/opt/module/spark-local/people.json"

val peopleDF = spark.read.json(path)

创建临时表

peopleDF.createOrReplaceTempView("people")

数据查询

val resDF = spark.sql("SELECT name FROM people WHERE age BETWEEN 13 AND 19")

四、CSV

Spark SQL 可以配置 CSV 文件的列表信息,读取 CSV 文件,CSV 文件的第一行设置为

数据列。

spark.read.format("csv").option("sep",";").option("inferSchema","true")

.option("header", "true").load("data/user.csv")

  1. 数据准备:user.csv

spark.read.jdbc,spark,学习,大数据,sql,hive

 

2.读取 CSV 文件

import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession

object JDBCTest {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("SQL")
    val spark:SparkSession = SparkSession.builder().config(sparkConf).getOrCreate()
    
    spark.read.format("csv").option("sep",";").option("inferSchema","true")
      .option("header", "true").load("data/user.csv").show()
    spark.stop()
  }
}

执行结果:

spark.read.jdbc,spark,学习,大数据,sql,hive

 五、MySQL

Spark SQL 可以通过 JDBC 从关系型数据库中读取数据的方式创建 DataFrame,通过对

DataFrame 一系列的计算后,还可以将数据再写回关系型数据库中。

IDEA通过JDBC对MySQL进行操作:

  1. 导入依赖

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.27</version>
</dependency>

2)mysql中user表:

spark.read.jdbc,spark,学习,大数据,sql,hive

 

3)读取数据

1.通用的load方法:

mport org.apache.spark.SparkConf
import org.apache.spark.sql.{DataFrame, SparkSession}

import java.util.Properties

object JDBCTest {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("SQL")
    val spark: SparkSession = SparkSession.builder().config(sparkConf).getOrCreate()

    import spark.implicits._
    //通用的load方式读取
    spark.read.format("jdbc")
      .option("url", "jdbc:mysql://node01:3306/system")
      .option("driver", "com.mysql.jdbc.Driver")
      .option("user", "root")
      .option("password", "123456")
      .option("dbtable", "user")
      .load().show()
    spark.stop()
  }
}

执行结果:

spark.read.jdbc,spark,学习,大数据,sql,hive

2. 通用的load方法的另一种形式:

mport org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession

object JDBCTest {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("SQL")
    val spark: SparkSession = SparkSession.builder().config(sparkConf).getOrCreate()
    import spark.implicits._
    //通用的load方法的另一种形式
    spark.read.format("jdbc")
      .options(
     Map("url"->"jdbc:mysql://node01:3306/system?user=root&password=123456","dbtable"->"user","driver"->"com.mysql.jdbc.Driver"))
      .load().show()
    spark.stop()
  }
}

执行结果:

spark.read.jdbc,spark,学习,大数据,sql,hive

 3.通过JDBC:

import org.apache.spark.SparkConf
import org.apache.spark.sql.{DataFrame, SparkSession}
import java.util.Properties

object JDBCTest {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("SQL")
    val spark: SparkSession = SparkSession.builder().config(sparkConf).getOrCreate()
    import spark.implicits._
    //通过JDBC
    val pros :Properties = new Properties()
    pros.setProperty("user","root")
    pros.setProperty("password","123456")
    val df :DataFrame = spark.read.jdbc("jdbc:mysql://node01:3306/system","user",pros)
    df.show()
  }
}

执行结果:

spark.read.jdbc,spark,学习,大数据,sql,hive

 4.写入数据

注:写入数据时保存数据的表由程序自动创建,不可以提前创建

方法一:

mport org.apache.spark.SparkConf
import org.apache.spark.sql.{ SaveMode, SparkSession}
case class Stu(name:String,age:Int)

object JDBCTest {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("SQL")
    val spark:SparkSession = SparkSession.builder().config(sparkConf).getOrCreate()
    import spark.implicits._

    val rdd = spark.sparkContext.makeRDD(
      List((Stu("zhangsan",20)),Stu("lisi",23))
    )
    val ds = rdd.toDS()
    ds.write.format("jdbc")
      .option("url","jdbc:mysql://node01:3306/system")
      .option("driver","com.mysql.jdbc.Driver")
      .option("user","root")
      .option("password","123456")
      .option("dbtable","user2")
      .mode(SaveMode.Append)
      .save()
    spark.stop()

  }
}

执行结果:

spark.read.jdbc,spark,学习,大数据,sql,hive

 进入MySQL数据库查看结果:

spark.read.jdbc,spark,学习,大数据,sql,hive

 方法二:

import org.apache.spark.SparkConf
import org.apache.spark.sql.{SaveMode, SparkSession}
case class Stu(name:String,age:Int)

object JDBCTest {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("SQL")
    val spark:SparkSession = SparkSession.builder().config(sparkConf).getOrCreate()
    import spark.implicits._

    val rdd = spark.sparkContext.makeRDD(
      List((Stu("zhangsan",20)),Stu("lisi",23))
    )
    val ds = rdd.toDS()
    ds.write.format("jdbc")
      .options(  Map("url"->"jdbc:mysql://node01:3306/system?user=root&password=123456","dbtable"->"user3","driver"->"com.mysql.jdbc.Driver"))
      .mode(SaveMode.Append)
      .save()
    spark.stop()
  }
}

执行结果:

spark.read.jdbc,spark,学习,大数据,sql,hive

 进入MySQL数据库查看结果:

spark.read.jdbc,spark,学习,大数据,sql,hive文章来源地址https://www.toymoban.com/news/detail-642217.html

到了这里,关于Spark-SQL连接JDBC的方式及代码写法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hudi Spark-SQL增量查询数据几种方式

    由于项目上主要用Hive查询Hudi,所以之前总结过一篇:Hive增量查询Hudi表。最近可能会有Spark SQL增量查询Hudi表的需求,并且我发现目前用纯Spark SQL的形式还不能直接增量查询Hudi表,于是进行学习总结一下。 先看一下官方文档上Spark SQL增量查询的方式,地址:https://hudi.apache.or

    2024年02月11日
    浏览(30)
  • 【大数据技术】Spark-SQL如何连接MySQL并进行读写数据

    1、配置连接MySQL的驱动 根据自己安装的MySQL的版本,找到正确的驱动文件,我的是MySQL8.0.19 所以驱动文件是mysql-connector-java-8.0.19.jar,将其复制到spark目录下的jars文件夹下 my@ubuntu:/usr/local/spark245_h_local/jars$ cp /home/my/myfolder/mysql-connector-java-8.0.19/mysql-connector-java-8.0.19.jar . 2、spark

    2024年02月08日
    浏览(29)
  • spark-sql

    [root@localhost bin]# ./spark-sql Error: Failed to load class org.apache.spark.sql.hive.thriftserver.SparkSQLCLIDriver. Failed to load main class org.apache.spark.sql.hive.thriftserver.SparkSQLCLIDriver. You need to build Spark with -Phive and -Phive-thriftserver. 24/02/22 00:23:20 INFO ShutdownHookManager: Shutdown hook called 24/02/22 00:23:20 INFO Shutd

    2024年02月22日
    浏览(32)
  • Spark-SQL小结

    目录 一、RDD、DataFrame、DataSet的概念、区别联系、相互转换操作   1.RDD概念   2.DataFrame概念   3.DataSet概念   4.RDD、DataFrame、DataSet的区别联系   5.RDD、DataFrame、DataSet的相互转换操作    1 RDD-DataFrame、DataSet    2  DataFrame-RDD,DataSet    3 DataSet-RDD,DataFrame 二、Spark-SQL连接JDBC的方式

    2024年02月09日
    浏览(35)
  • Spark参数配置和调优,Spark-SQL、Config

    一、Hive-SQL / Spark-SQL参数配置和调优 二、shell脚本spark-submit参数配置 三、sparkSession中配置参数

    2024年02月13日
    浏览(38)
  • spark-sql字段血缘实现

    Apache Spark是一个开源的大数据处理框架,它提供了一种高效、易于使用的方式来处理大规模数据集。在Spark中,数据是通过DataFrame和Dataset的形式进行操作的,这些数据结构包含了一系列的字段(也称为列)。字段血缘是Spark中的一个关键概念,它帮助我们理解数据的来源和流

    2024年02月02日
    浏览(41)
  • spark-sql: insert overwrite分区表问题

    用spark-sql,insert overwrite分区表时发现两个比较麻烦的问题: 从目标表select出来再insert overwrite目标表时报错:Error in query: Cannot overwrite a path that is also being read from. 从其他表select出来再insert overwrite目标表时,其他分区都被删除了. 印象中这两个问题也出现过,但凭经验和感觉,

    2024年02月11日
    浏览(31)
  • 在 spark-sql / spark-shell / hive / beeline 中粘贴 sql、程序脚本时的常见错误

    《大数据平台架构与原型实现:数据中台建设实战》一书由博主历时三年精心创作,现已通过知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,京东购书链接:https://item.jd.com/12677623.html,扫描

    2024年02月14日
    浏览(25)
  • spark-sql处理json字符串的常用函数

    整理了spark-sql处理json字符串的几个函数: 1 get_json_object 解析不含数组的 json   2 from_json  解析json 3 schema_of_json 提供生成json格式的方法 4 explode   把JSONArray转为多行 get_json_object(string json_string, string path) :适合最外层为{}的json解析。  第一个参数是json对象变量,也就是含j

    2023年04月08日
    浏览(31)
  • spark-sql数据重复之File Output Committer问题

      我们先来回顾下之前介绍过的三种Committer:FileOutputCommitter V1、FileOutputCommitter V2、S3A Committer,其基本代表了整体的演进趋势。 核心代码讲解详细参照:Spark CommitCoordinator 保证数据一致性 OutputCommitter commitTask commitJob mapreduce.fileoutputcommitter.algorithm.version | 技术世界 | committask

    2024年02月14日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包