Spark连接mysql的几种方式

博客《2020大数据面试真题(持续更新)》已迁移至微信公众号!!!     喜欢的朋友可以关注

最新面试题将会在微信公众号更新!

关注公众号即可获得免费学习资源,获得免费指导!!!

 

1.sparkcore-jdbc

// 获取mysql的连接  写入本地的mysql
    val url = "jdbc:mysql://hdp-01:3306/test?characterEncoding=utf-8"
    var conn: Connection = null
    var pstm1: PreparedStatement = null
    var pstm2: PreparedStatement = null
    try {
      conn = DriverManager.getConnection(url, "root", "123456")
      // 创建表
      pstm1 = conn.prepareStatement("create table if not exists province  (province varchar(20),cnts int)")
      pstm1.execute()
      pstm2 = conn.prepareStatement("insert into province values(?,?)")
      // 遍历iterator
      // 循环赋值 并入库
      pstm2.setString(1, pro)
      pstm2.setInt(2, cnt)
      pstm2.execute()
      
    } catch {
      // 错误打印要加上
      case e: Exception => e.printStackTrace()
    } finally {
      if (pstm1 != null) pstm1.close()
      if (pstm2 != null) pstm2.close()
      if (conn != null) conn.close()
    }

2.sparksql写入mysql

2.1 连接信息代码里面写

    val url = "jdbc:mysql://hdp-01:3306/test?characterEncoding=utf-8"
    val conn: Properties = new Properties()
    conn.setProperty("user","root")
    conn.setProperty("password","123456")
    //本地运行库不加  集群运行必须加
    conn.setProperty("driver","com.mysql.jdbc.Driver")
    result.write.mode(SaveMode.Overwrite).jdbc(url,"v_test",conn)

2.2  连接信息写在配置文件里面

db.url="jdbc:mysql://hdp-01:3306/test?characterEncoding=utf-8"
db.driver="db.user=""com.mysql.jdbc.Driver"
db.password="123456"
db.user="root"

读取配置文件信息

2.2.1

    val prop = new Properties()
    val stream: InputStream = this.getClass.getClassLoader.getResourceAsStream("application.conf")
    prop.load(stream)
    val dbUrl = prop.getProperty("db.url")
    println(dbUrl)

2.2.2 

需要先引入一个jar包

<!--导入 configFactory的jar包-->
<dependency>
    <groupId>com.typesafe</groupId>
    <artifactId>config</artifactId>
    <version>1.3.0</version>
</dependency>
    //默认加载配置文件application.conf(.json   .properties)
    val config: Config = ConfigFactory.load()
    println(config.getString("db.url"))

3.scalalike连接

3.1 导包

 <dependency>
            <groupId>org.scalikejdbc</groupId>
            <artifactId>scalikejdbc_2.11</artifactId>
            <version>2.5.0</version>
        </dependency>

        <!-- scalikejdbc-config_2.11 -->
        <dependency>
            <groupId>org.scalikejdbc</groupId>
            <artifactId>scalikejdbc-config_2.11</artifactId>
            <version>2.5.0</version>
        </dependency>

3.2 配置文件 application.conf

db.default.url="jdbc:mysql://bigdata1:3306/test?characterEncoding=utf-8"
db.default.driver="com.mysql.jdbc.Driver"
db.default.password="11111111111"
db.default.user="root"
// 加载数据库配置信息
// 默认加载db.default.*
DBs.setup()
// 加载db.wedoctor配置信息
DBs.setup('wedoctor')

3.3 使用

package com.wedoctor.sparkstreaming.scalike

import org.apache.log4j.{Level, Logger}
import scalikejdbc.{DB, SQL}
import scalikejdbc.config.DBs

object ScalikeJdbcDemo {
  Logger.getLogger("org").setLevel(Level.ERROR)

  def main(args: Array[String]): Unit = {
     DBs.setup() //加载默认设置

    //读取数据
    val result: List[(String, Integer)] = DB.readOnly { implicit session =>
      SQL("select * from province").map(rs => {
        //按照字段名称
        val province: String = rs.string("province")
        //get方法取值
        val cnts: Integer = rs.get[Integer](2)
        //返回结果用元组封装
        (province, cnts)
      }).list().apply()
    }
    //result.foreach(println)

    //指定条件查询
    val result2 = DB.readOnly { implicit session =>
      SQL("select * from province where province=?").bind("北京").map(rs => {
        val str: String = rs.string("province")
        (str,rs.int(2))
      }).list().apply()
    }
    //result2.foreach(print)

    //事务控制
    DB.localTx{implicit session=>
      SQL("insert into province(province, cnts) values(?,?)")
        .bind("wedoctor", 22).update().apply()
     // 2 / 0  // autoCommit API 不支持事务
      SQL("insert into province(province, cnts) values(?,?)")
        .bind("wedoctor", 33).update().apply()
    }


  }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要使用Spark连接MySQL,需要执行以下步骤: 1. 首先,需要下载并安装MySQL的JDBC驱动程序。可以从MySQL官方网站或Maven中央存储库下载。 2. 在Spark应用程序中,可以使用以下代码来启动SparkSession并连接MySQL数据库: ```scala import org.apache.spark.sql._ val spark = SparkSession.builder .appName("Spark SQL MySQL Example") .config("spark.some.config.option", "some-value") .getOrCreate() val jdbcDF = spark.read .format("jdbc") .option("url", "jdbc:mysql://localhost:3306/mydatabase") .option("dbtable", "mytable") .option("user", "myusername") .option("password", "mypassword") .load() jdbcDF.show() ``` 这里使用了Spark SQL的JDBC数据源来连接MySQL数据库。需要指定MySQL数据库的URL、表名、用户名和密码来读取数据。读取数据后,可以使用`show()`方法来显示数据。 3. 如果要将数据写入MySQL数据库,则可以使用以下代码: ```scala jdbcDF.write .format("jdbc") .option("url", "jdbc:mysql://localhost:3306/mydatabase") .option("dbtable", "mytable") .option("user", "myusername") .option("password", "mypassword") .mode("overwrite") .save() ``` 这里使用了Spark SQL的JDBC数据源来将数据写入MySQL数据库。需要指定MySQL数据库的URL、表名、用户名和密码,并使用`mode()`方法指定写入模式(覆盖或追加)。 注意:在将数据写入MySQL数据库之前,需要确保MySQL数据库中已经存在指定的表。如果不存在,则需要先创建表。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大数据私房菜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值