1、基本概念和用法(摘自spark官方文档中文版)

Spark SQL 还有一个能够使用 JDBC 从其他数据库读取数据的数据源。当使用 JDBC 访问其它数据库时,应该首选 JdbcRDD。这是因为结果是以数据框(DataFrame)返回的,且这样 Spark SQL操作轻松或便于连接其它数据源。因为这种 JDBC 数据源不需要用户提供 ClassTag,所以它也更适合使用 Java 或 Python 操作。(注意,这与允许其它应用使用 Spark SQL 执行查询操作的 Spark SQL JDBC 服务器是不同的)。

使用 JDBC 访问特定数据库时,需要在 spark classpath 上添加对应的 JDBC 驱动配置。例如,为了从 Spark Shell 连接 postgres,你需要运行如下命令 :bin/spark-shell --driver-class-path postgresql-9.4.1207.jar --jars postgresql-9.4.1207.jar

通过调用数据源API,远程数据库的表可以被加载为DataFrame 或Spark SQL临时表。支持的参数有 :属性名含义url要连接的 JDBC URL。

dbtable要读取的 JDBC 表。 注意,一个 SQL 查询的 From 分语句中的任何有效表都能被使用。例如,既可以是完整表名,也可以是括号括起来的子查询语句。

driver用于连接 URL 的 JDBC 驱动的类名。

partitionColumn, lowerBound, upperBound, numPartitions这几个选项,若有一个被配置,则必须全部配置。它们描述了当从多个 worker 中并行的读取表时,如何对它分区。partitionColumn 必须时所查询表的一个数值字段。注意,lowerBound 和 upperBound 都只是用于决定分区跨度的,而不是过滤表中的行。因此,表中的所有行将被分区并返回。

fetchSizeJDBC fetch size,决定每次读取多少行数据。 默认将它设为较小值(如,Oracle上设为 10)有助于 JDBC 驱动上的性能优化。

2、scala代码实现连接mysql

2.1 添加mysql 依赖

在sbt 配置文件里添加:"mysql" % "mysql-connector-java" % "6.0.6"

然后执行:sbt eclipse

2.2 建表并初始化数据DROP TABLE IF EXISTS `USER_T`;

CREATE TABLE `USER_T` (

`ID` INT(11) NOT NULL,

`USER_NAME` VARCHAR(40) NOT NULL,

PRIMARY KEY (`ID`)

) ENGINE=INNODB  DEFAULT CHARSET=UTF8;INSERT  INTO `USER_T`(`ID`,`USER_NAME`) VALUES (1,'测试1');INSERT  INTO `USER_T`(`ID`,`USER_NAME`) VALUES (2,'测试2');

image

2.3 代码

2.3.1 查询package com.dkl.leanring.spark.sqlimport org.apache.spark.sql.SparkSession/**

* spark查询mysql测试

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

.format("jdbc")

.option("url", "jdbc:mysql://192.168.44.128:3306/hive?useUnicode=true&characterEncoding=utf-8")

.option("dbtable", "USER_T")

.option("user", "root")

.option("password", "Root-123456")

.load()

jdbcDF.show()

}

}

image

2.3.2 插入数据

image

package com.dkl.leanring.spark.sqlimport org.apache.spark.sql.SparkSessionimport org.apache.spark.sql.SaveModeimport java.util.Properties/**

* 从USER_T.csv读取数据并插入的mysql表中

*/object MysqlInsertDemo {  def main(args: Array[String]): Unit = {    val spark = SparkSession.builder().appName("MysqlInsertDemo").master("local").getOrCreate()    val df = spark.read.option("header", "true").csv("src/main/resources/scala/USER_T.csv")

df.show()    val url = "jdbc:mysql://192.168.44.128:3306/hive?useUnicode=true&characterEncoding=utf-8"

val prop = new Properties()

prop.put("user", "root")

prop.put("password", "Root-123456")

df.write.mode(SaveMode.Append).jdbc(url, "USER_T", prop)

}

}

image

再查询一次,就会发现表里多了几条数据

image

作者:董可伦

链接:https://www.jianshu.com/p/2799aaf50106

spark 写mysql 设置主键_Spark Sql 连接mysql相关推荐

  1. mysql设置主键的作用_mysql设置主键有什么用

    mysql设置主键的作用是:1.唯一地标识表中的每一行,通过它可强制表的实体完整性:2.主要是用于其他表的外键关联,以及本记录的修改与删除. [相关学习推荐:mysql教程] mysql设置主键的作用 ...

  2. mysql设置主键自增长,插入数据时报错,解决

    mysql设置主键自增长,插入数据时报错,解决 创建一个可以自增长的表 create table user ( sid int not null primary key auto_inrement, ...

  3. mysql设置主键初始默认值

    mysql设置主键默认开始值 在Navicat 中输入一下命令(默认以1000开始) List itemalter table resource AUTO_INCREMENT=1000; 如果报错输入 ...

  4. mysql 设置主键自增语句

    mysql 设置主键自增语句 alter table 表名 modify id int auto_increment primary key 若提示 > 1068 - Multiple prim ...

  5. mysql 设置主键命令_mysql用命令行如何设置主键

    mysql用命令行设置主键的方法:首先进入到mysql命令行工具,并通过use关键字进行到目标数据库里:然后通过命令ADD PRIMARY KEY来添加主键,并回车即可. mysql用命令行设置主键的 ...

  6. mysql设置主键自动增长

    1.不设置主键的增长起点(默认1开始) create table user(usernc varchar(10) not null,id int not null auto_increment,nam ...

  7. MySql设置主键,外键命令

    设置主键命令 : 在一开始建表的时候就要设置好主键 studentID INT auto_increment PRIMARY KEY, 把已经建好的表的某一列设置成主键 设置外键命令: FOREIGN ...

  8. mysql设置主键约束为降序_MySQL约束的概述 - osc_tko37abm的个人空间 - OSCHINA - 中文开源技术交流社区...

    MySQL约束 今日学习内容 1.DQL:查询语句 1.排序查询 2.聚合函数 3.分组查询 4.分页查询 2.约束 3.多表关系 4.范式 5.数据库备份和还原 DQL查询语句 排序 通过ORDER ...

  9. MySQL设置主键、联合主键、外键、唯一约束、非空约束、默认约束

    MySQL登录.查看记录等基本操作 MySQL设置表的属性值自动增加 auto_increment 1.主键.联合主键.外键 1.什么是主键 主键是在多条记录中用于确定一条记录时使用的标识符.主键具备 ...

最新文章

  1. 终于把时间序列分析的关键点全讲清楚了!
  2. 收藏 | 最全中科大计算机学院课程资源(含答案)
  3. Tableau实战系列构建基本视图以浏览数据
  4. Boost:boost::source_location的用法测试程序
  5. AliOS Things v1.1.1新特性
  6. gradle打包java项目_gradle打包java项目
  7. 常见设计模式结构图助记之结构型
  8. the deep ritz method论文梳理
  9. HNOI2019:My Dream
  10. WindRiver workbench 建立工程步骤
  11. 数字化转型|利用现代技术和通信手段|改变企业为客户创造价值的方式
  12. JS 把 Wed Jul 15 2015 00:00:00 GMT+0800 转换成2015-07-15
  13. SAP 金额等负号提前问题
  14. gcc中的 -I -L(大写l) -l(小写l) -Wl,-rpath 选项
  15. java字符串去重复_java去除重复的字符串和移除不想要的字符串
  16. Servlet与表单、数据库综合项目实战【学生信息管理】
  17. wltp和nedc续航差多少_WLTP续航和NEDC续航差多少?
  18. 全新小旋风万能蜘蛛池9.02开心版/站长必备SEO+带教程
  19. 笔记本外接显示器闪烁问题
  20. crontab 每5秒钟执行一次

热门文章

  1. 免费查找AI最优论文神器:一键出结果,分分钟提取论文表格、最新数据
  2. 这本1900页的机器学习数学全书火了!完整版开放下载
  3. “这辈子不可能打工男子”出狱了,引发热议!
  4. 几个cvebase_ifo基础信息融合在一起
  5. 实验三 JSP应用开发进阶
  6. ORDNet:为场景分割捕获全范围依赖关系
  7. 为什么要进行图学习?谈一谈逆势而上的图神经网络
  8. 【OpenCV 4开发详解】深度神经网络应用实例
  9. 关于大搜车「无线开发中心」团队
  10. JVM解读-性能调优实例