@羲凡——只为了更好的活着
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写数据
====================================================================
@羲凡——只为了更好的活着
若对博客中有任何问题,欢迎留言交流