IDEA+SBT+Spark+MySQL SparkSQL连接mysql数据库驱动依赖问题(略坑)

本文详细介绍了如何在Spark项目中使用sbt管理依赖,解决常见错误,并通过示例代码展示了如何使用SparkSession连接MySQL数据库,读写数据,以及如何创建DataFrame并将其写入数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spark-shell中并不会遭遇这么多问题 这是在IDEA中sbt依赖问题。

1、导入包问题

import java.util.Properties

import org.apache.spark.sql

import org.apache.spark.sql.types._
import org.apache.spark.sql.Row
import org.apache.spark.sql.SparkSession
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext

上面需要用到的包,要在sbt中进行指定 

build.sbt文件如下:

name := "Simple Project"
version := "1.0"
scalaVersion := "2.11.8"
libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.1.0"
libraryDependencies += "org.apache.hbase" % "hbase-client" % "1.1.2"
libraryDependencies += "org.apache.hbase" % "hbase-common" % "1.1.2"
libraryDependencies += "org.apache.hbase" % "hbase-server" % "1.1.2"

libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.2.0"
libraryDependencies += "mysql" % "mysql-connector-java" % "8.0.15"

上面org.apache.spark需要2.0.0以上的包 不然无法导入SparkSession。

另外令人费解的是 从依赖中的外部导入的mysql-connector-java-8.0.15.jar就是起不了作用,导致一直在包找不到 com.mysql.jdbc驱动。

所以:libraryDependencies += "mysql" % "mysql-connector-java" % "8.0.15"就是为了解决驱动问题。

等待sbt:dump完成,运行代码成功。


import java.util.Properties

import org.apache.spark.sql

import org.apache.spark.sql.types._
import org.apache.spark.sql.Row
import org.apache.spark.sql.SparkSession
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext

//import com.mysql.jdbc

//SparkSession
object ConnectJDBC {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("ConnectJDBC").setMaster("local[*]")
    val sc = new SparkContext(conf)

    val spark = SparkSession.builder().getOrCreate()
    import spark.implicits._

    // 读取信息
    val jdbcDF = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/spark")  //*****这是数据库名
      .option("driver", "com.mysql.jdbc.Driver").option("dbtable", "student")//*****是表名
      .option("user", "root").option("password", "123456").load()
    jdbcDF.show()


    //下面我们设置两条数据表示两个学生信息
    val studentRDD = spark.sparkContext.parallelize(Array("1 Licheng M 26", "2 Jianghua M 27")).map(_.split(" "))

    //下面要设置模式信息
    val schema = StructType(List(StructField("id", IntegerType, true), StructField("name", StringType, true), StructField("gender", StringType, true), StructField("age", IntegerType, true)))

    //下面创建Row对象,每个Row对象都是rowRDD中的一行
    val rowRDD = studentRDD.map(p => Row(p(0).toInt, p(1).trim, p(2).trim, p(3).toInt))

    //建立起Row对象和模式之间的对应关系,也就是把数据和模式对应起来
    val studentDF = spark.createDataFrame(rowRDD, schema)

    //下面创建一个prop变量用来保存JDBC连接参数
    val prop = new Properties()
    prop.put("user", "root") //表示用户名是root
    prop.put("password", "123456") //表示密码是hadoop
    prop.put("driver", "com.mysql.jdbc.Driver") //表示驱动程序是com.mysql.jdbc.Driver
//    /usr/local/spark/jars/mysql-connector-java-5.1.40/mysql-connector-java-5.1.40-bin.jar
    //下面就可以连接数据库,采用append模式,表示追加记录到数据库spark的student表中
    studentDF.write.mode("append").jdbc("jdbc:mysql://localhost:3306/spark", "spark.student", prop)
    
  }
}

-----以上代码参考厦门大学林子雨老师《Spark编程基础(Scala版)》。

运行结果:

+---+---------+------+---+
| id|     name|gender|age|
+---+---------+------+---+
|  1|  Licheng|     M| 26|
|  2| Jianghua|     M| 27|
+---+---------+------+---+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值