spark 写mysql 设置主键_Spark Sql 连接mysql
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相关推荐
- mysql设置主键的作用_mysql设置主键有什么用
mysql设置主键的作用是:1.唯一地标识表中的每一行,通过它可强制表的实体完整性:2.主要是用于其他表的外键关联,以及本记录的修改与删除. [相关学习推荐:mysql教程] mysql设置主键的作用 ...
- mysql设置主键自增长,插入数据时报错,解决
mysql设置主键自增长,插入数据时报错,解决 创建一个可以自增长的表 create table user ( sid int not null primary key auto_inrement, ...
- mysql设置主键初始默认值
mysql设置主键默认开始值 在Navicat 中输入一下命令(默认以1000开始) List itemalter table resource AUTO_INCREMENT=1000; 如果报错输入 ...
- mysql 设置主键自增语句
mysql 设置主键自增语句 alter table 表名 modify id int auto_increment primary key 若提示 > 1068 - Multiple prim ...
- mysql 设置主键命令_mysql用命令行如何设置主键
mysql用命令行设置主键的方法:首先进入到mysql命令行工具,并通过use关键字进行到目标数据库里:然后通过命令ADD PRIMARY KEY来添加主键,并回车即可. mysql用命令行设置主键的 ...
- mysql设置主键自动增长
1.不设置主键的增长起点(默认1开始) create table user(usernc varchar(10) not null,id int not null auto_increment,nam ...
- MySql设置主键,外键命令
设置主键命令 : 在一开始建表的时候就要设置好主键 studentID INT auto_increment PRIMARY KEY, 把已经建好的表的某一列设置成主键 设置外键命令: FOREIGN ...
- mysql设置主键约束为降序_MySQL约束的概述 - osc_tko37abm的个人空间 - OSCHINA - 中文开源技术交流社区...
MySQL约束 今日学习内容 1.DQL:查询语句 1.排序查询 2.聚合函数 3.分组查询 4.分页查询 2.约束 3.多表关系 4.范式 5.数据库备份和还原 DQL查询语句 排序 通过ORDER ...
- MySQL设置主键、联合主键、外键、唯一约束、非空约束、默认约束
MySQL登录.查看记录等基本操作 MySQL设置表的属性值自动增加 auto_increment 1.主键.联合主键.外键 1.什么是主键 主键是在多条记录中用于确定一条记录时使用的标识符.主键具备 ...
最新文章
- 终于把时间序列分析的关键点全讲清楚了!
- 收藏 | 最全中科大计算机学院课程资源(含答案)
- Tableau实战系列构建基本视图以浏览数据
- Boost:boost::source_location的用法测试程序
- AliOS Things v1.1.1新特性
- gradle打包java项目_gradle打包java项目
- 常见设计模式结构图助记之结构型
- the deep ritz method论文梳理
- HNOI2019:My Dream
- WindRiver workbench 建立工程步骤
- 数字化转型|利用现代技术和通信手段|改变企业为客户创造价值的方式
- JS 把 Wed Jul 15 2015 00:00:00 GMT+0800 转换成2015-07-15
- SAP 金额等负号提前问题
- gcc中的 -I -L(大写l) -l(小写l) -Wl,-rpath 选项
- java字符串去重复_java去除重复的字符串和移除不想要的字符串
- Servlet与表单、数据库综合项目实战【学生信息管理】
- wltp和nedc续航差多少_WLTP续航和NEDC续航差多少?
- 全新小旋风万能蜘蛛池9.02开心版/站长必备SEO+带教程
- 笔记本外接显示器闪烁问题
- crontab 每5秒钟执行一次