Spark2.0 读写mysql数据(scala)

本文介绍如何使用Spark2.3.2版本通过Scala语言读取和写入MySQL数据库数据,包括配置依赖、示例代码及注意事项等内容。

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

@羲凡——只为了更好的活着

Spark2.0 读写mysql数据(scala)

特别强调楼主使用spark2.3.2版本

1.准备工作

pom.xml文件中要添加

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>5.1.38</version>
</dependency>
2.不啰嗦直接上代码
import java.util.Properties
import org.apache.spark.sql.{SaveMode, SparkSession}

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

    val driver = "com.mysql.jdbc.Driver"
    val url = "jdbc:mysql://deptest20:3306/test_data"
    val user = "root"
    val password = "123456"
    val props = new Properties()
    props.put("user",user)
    props.put("password",password)
    props.setProperty("useSSL", "false")
    props.setProperty("useUnicode","true")
    props.setProperty("characterEncoding","utf8")

    val url2 = "jdbc:mysql://deptest23:3306/test_data"
    val user2 = "root"
    val password2 = "123456"
    val props2 = new Properties()
    props2.put("user",user2)
    props2.put("password",password2)

    //spark.read.jdbc(url,"kettle_data_test",props)
    //spark.read.jdbc(url,"kettle_data_test","age",10,20,3,props)
    val arr = Array[String]("age<10","age>=10 and age<20","age>=20 and age<30","age>=30")
    spark.read.jdbc(url,"kettle_data_test",arr,props)
      .createOrReplaceTempView("tmp_mysql_table")

    spark.sql("select * from tmp_mysql_table")
        .write.mode(SaveMode.Overwrite)
        .option("driver","com.mysql.jdbc.Driver")
        .option("CHARSET","utf8")
        .jdbc(url2,"kettle_data_receiver_test",props)

    spark.stop()
  }
}
3.注意事项

a.直接使用 jdbc(url,“kettle_data_test”,props) 只是用了一个分区读取mysql数据,如果是小表可以这么操作,大表的话,就很不推荐。
b.DataFrame向mysql中写数据,没有插入和更新的行操作,只有表级操作,Overwrite是将原表删掉,重新建表,改变原表结构,所以不推荐直接向mysql写数据

====================================================================
@羲凡——只为了更好的活着

若对博客中有任何问题,欢迎留言交流

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值