Spark SQL支持通过JDBC直接读取数据库中的数据,这个特性是基于JdbcRDD实现。返回值作为DataFrame返回,这样可以直接使用Spark SQL并跟其他的数据源进行join操作。JDBC数据源可以很简单的通过Java或者Python,而不需要提供ClassTag。注意这与Spark SQL JDBC server不同,后者是基于Spark SQL执行查询。

要保证能使用需要把对应的jdbc驱动放到spark的classpath中。比如,想要连接postgres可以在启动命令中添加jars:

bin/spark-shell
--driver-class-path postgresql-9.4.1207.jar
--jars postgresql-9.4.1207.jar

远程数据库的表可以加载成DataFrame或者注册成Spark SQL的临时表,用户可以在数据源选项中配置JDBC相关的连接参数。user和password一般是必须提供的参数,另外一些参数可以参考下面的列表:

url

JDBC连接url,比如jdbc:postgresql://localhost/test?user=fred&password=secret

dbtable

需要读取或者写入的JDBC表,注意里面的内容将会作为from后面的部分,比如 select * from 。注意不能同时配置dbtable和query。

query

query用于指定from后面的子查询,拼接成的sql如下:SELECT FROM () spark_gen_alias 。注意dbtable和query不能同时使用;不允许同时使用partitionColumn和query。

注意:这里的dbtable和query其实没有太大的区别,只是query会默认套一层别名而已。

driver

jdbc驱动driver

partitionColumn, lowerBound, upperBound

指定时这三项需要同时存在,描述了worker如何并行读取数据库。其中partitionColumn必须是数字、date、timestamp,lowerBound和upperBound只是决定了分区的步长,而不会过滤数据,因此表中所有的数据都会被分区返回。该参数仅用于读。

numPartitions

读写时的最大分区数。这也决定了连接JDBC的最大连接数,如果并行度超过该配置,将会使用coalesce(partition)来降低并行度。

queryTimeout

driver执行statement的等待时间,0意味着没有限制。写入的时候这个选项依赖于底层是如何实现setQueryTimeout的,比如h2 driver会检查每个query。默认是0

fetchSize

fetch的大小,决定了每一个fetch,拉取多少数据量。这个参数帮助针对默认比较小的驱动进行调优,比如oracle默认是10行。仅用于读操作。

batchSize

batch大小,决定插入时的并发大小,默认1000。

isolationLvel

事务隔离的等级,作用于当前连接。可以配置成NONE, READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ, SERIALIZABLE, 依赖于底层jdbc提供的事务隔离,默认是READ_UNCOMMITTED。这个选项仅用于写操作。

sessionInitStatment

每个数据库session创建前执行的操作,用于初始化。如定义一些触发器操作。如 BEGIN execute immediate 'alter session set "_serial_direct_read"=true'; END;

truncate

写操作选项,当使用SaveMode.Overwrite时,该选项用于是否直接删除并重建表。当表结构发现变化的时候会失效。默认是false。

cascadeTruncate

写操作选项,是否开启级联删除。

createTableOptions

写操作选项,一般用于配置特殊的分区或者数据库配置,比如 CREATE TABLE t (name string) ENGINE=InnoDB

createTableColumnTypes

配置数据库字段的类型,比如 name CHAR(64), comments VARCHAR(1024),仅支持spark sql中支持的数据类型。

customSchema

自定义读取的schema信息,比如 id DECIMAL(38, 0), name STRING 。可以配置部分字段,其他的使用默认的类型映射,比如 id DECIMAL(38, 0)。仅用于读操作。

pushDownPredicate

该选项用于开启或禁用jdbc数据源的谓词下推。默认是true。如果配置为false,那么所有的filter操作都会由spark来完成。当过滤操作用spark更快时,一般才会关闭下推功能。

// 加载jdbc
val jdbcDF = spark.read.format("jdbc").option("url", "jdbc:postgresql:dbserver").option("dbtable", "schema.tablename").option("user", "username").option("password", "password").load()// 使用propeties
val connectionProperties = new Properties()
connectionProperties.put("user", "username")
connectionProperties.put("password", "password")val jdbcDF2 = spark.read.jdbc("jdbc:postgresql:dbserver", "schema.tablename", connectionProperties)// 指定自定义的schema信息
connectionProperties.put("customSchema", "id DECIMAL(38, 0), name STRING")
val jdbcDF3 = spark.read.jdbc("jdbc:postgresql:dbserver", "schema.tablename", connectionProperties)// 保存jdbc
jdbcDF.write.format("jdbc").option("url", "jdbc:postgresql:dbserver").option("dbtable", "schema.tablename").option("user", "username").option("password", "password").save()jdbcDF2.write.jdbc("jdbc:postgresql:dbserver", "schema.tablename", connectionProperties)// 指定自定义schema映射
jdbcDF.write.option("createTableColumnTypes", "name CHAR(64), comments VARCHAR(1024)").jdbc("jdbc:postgresql:dbserver", "schema.tablename", connectionProperties)

jdbc不能识别别名_Spark基础:读写JDBC相关推荐

  1. jdbc不能识别别名_生命离开氧气就不能活了吗? 氢气告诉你,No~

    生命是怎样开始的呢?它能在什么样的极端环境中生存呢?除了地球,生命能在地球之外的环境中存活吗?离开地球大气,生命还能生长吗? 这些问题解答起来会很复杂,牵扯到很多化学知识,甚至于科学家们还一直在孜孜不 ...

  2. java jdbc_详解Java基础知识——JDBC

    JDBC Java DataBase Connectivity,java数据库连接,为了降低操作数据的难度,java提供jdbc,按照java面向对象特点,对操作进行了很多封装. JDBC提供了很多接 ...

  3. 【Java基础】JDBC

    JDBC核心技术 第1章:JDBC概述 1.1 数据的持久化 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数 ...

  4. Java数据库持久层框架基础:jdbc原理和使用综述

    Java数据库持久层框架基础:jdbc原理和使用综述 前言 jdbc基础架构 jbdc的使用 jdbc的主要接口 驱动 连接 连接池 会话Statement 结果集ResultSet 前言 目前jav ...

  5. java为什么不使用odbc_java jdbc和odbc的区别是什么?jdbc和odbc的关系是怎样的?

    对于jdbc和odbc你都了解多少呢?今天要给大家讲到的就是jdbc和odbc之间的内容,一起来了解一下jdbc和odbc的区别以及关系是怎样的吧! 下面先来给大家介绍一下jdbc和odbc之间的区别 ...

  6. jdbc连接数据库失败,com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败。

    创建数据库连接失败! com.microsoft.sqlserver.jdbc.SQLServerException: 到主机  的 TCP/IP 连接失败. java.net.ConnectExce ...

  7. JDBC 学习笔记(四)—— 自定义JDBC框架+Apache—DBUtils框架+事务管理+操作多表 - 解无邪

    本文目录: 1.自定义JDBC框架 --数据库元数据:DataBaseMetaData 2.自定义JDBC框架 --数据库元数据:DataBaseMetaData 3.自定义JDBC框架 --结果集元 ...

  8. 解决vscode红色波浪线的ts报错:找不到模块“store” ts(2307),不识别@别名路径

    使用TS构建vue3项目时,如果使用例如 import { store } from '@/store/user' 发生红色波浪线报错,说明ts不识别@别名,可以修改 tsconfig.json 文件 ...

  9. java jdbc 是什么意思_java中的jdbc是什么,

    详细内容 本篇文章给大家带来的内容是介绍java中的jdbc是什么,让大家了解jdbc有什么用,jdbc连接数据库的步骤.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. jdbc是什 ...

最新文章

  1. 《深入理解Spring Cloud与微服务构建》出版啦!
  2. OpenCV与Python之图像阈值化
  3. cmake (2)路径指令
  4. anaconda中tensorflow-estimator版本应与tensorflow-gpu版本相同
  5. java对mysql的简单操作的综合运用——注册系统
  6. 二本类 计算机类 大学录取分数线,重庆邮电大学什么专业实力最强?为什么二本专业都超一本线录取?...
  7. Android知识点汇总以及常见面试题
  8. cent os7 安装kafka_2.13-2.6.0
  9. 极简算法史---序 前言
  10. 鸿蒙系统hdc,HDC2020有看头:要揭开鸿蒙系统和EMUI11神秘面纱?
  11. 深度搜索算法C语言实现--以走迷宫为例
  12. 苹果手机蓝框一直跳动
  13. DirectUI学习笔记(1)
  14. 创业教父YC创始人Paul Graham就很烦鼓动年轻创业的
  15. 教你用Python画一棵圣诞树
  16. 工信部的小伙伴,还没过上年
  17. RGB 到HSV转换 摘自wiki百科
  18. Jzoj3547 MEX
  19. 学物理赶不上计算机,高二上学期物理为何这么难?
  20. experience(1):一个博士的经历(小木虫精华帖)

热门文章

  1. ASP.NET 5 and .NET Core RC 准备投入使用
  2. 安卓使用 HTTP 协议访问网络
  3. 中国科学院深圳先进技术研究院为Banana Pi团队提供活动场地
  4. 一次性动态绑定多个droplistdown
  5. Flex3加载外部数据1
  6. 办公室里绝对不可谈论的4大话题
  7. 深入理解JS中this关键字
  8. Mac OS包管理器Homebrew
  9. java基础第十四天_IO
  10. 【温故知新】CSS学习笔记(样式表)