spark通过jdbc可以从oracle中直接读取数据,返回dataframe。有时由于数据量较大,我们可以采用分区方式通过jdbc多线程并行从oracle中读取数据。

- oracle中的数据如下

TIME字段是年月,为字符串类型,ACCOUNT_BOOK为INT类型

image.png

object OraclePartitionReadTest {

def main(args: Array[String]): Unit = {

val spark = spark = SparkSession.builder()

.appName(appName)

.master("local")

.getOrCreate()

// 1. 通过jdbc从oracle中直接读取数据,不分区

val dfReadFromOra = spark.read.jdbc(url, "tableName", properties)

println(dfReadFromOra.count())

/* 2. 通过设定字段的条件来划分分区。

如下把TIME字段,按日期区间划分为两个子区间,[2018-01,2018-12]为一个区间,[2019-01,2019-12]为一个区间。定义一个字符串数组来存放区间,区间个数即为spark从oracle读取数据时的分区个数。

*/

val whereClause = Array("TIME>='2018-01' AND TIME <= '2018-13'", "TIME >= '2019-01' AND TIME <= '2019-12'")

val dfReadFromOraByPartUseWhereClause = spark.read.jdbc(url,"tableName", whereClause, oracleProp)

println(dfReadFromOraByPartUseWhereClause.rdd.getNumPartitions) // 打印分区个数

println(dfReadFromOraByPartUseWhereClause.count())

/* 3. 针对数值类型的字段ACCOUNT_BOOK,设定上边界和下边界,并指定分区个数,jdbc方法会根据这三个条件划分分区从oracle读取数据。

*/

val dfReadFromOraByPartitionUseBound = spark.read.jdbc(url, "tableName", "ACCOUNT_BOOK", 2000, 2500, 5,oracleProp)

println(dfReadFromOraByPartitionUseBound .rdd.getNumPartitions) // 打印分区个数

println(dfReadFromOraByPartitionUseBound.count())

}

}

通过验证,采用分区的方式从oracle中读取数据,提升读取数据的效果很明显。 分区个数根据情况而定,如果分区个数较大,可能会影响oracle数据库的正常运行。百十个分区一般不会有问题。

spark连接Oracle数据库,Spark通过jdbc采用分区的方式从oracle读数据相关推荐

  1. 如何将oracle数据库中的表结构导入到sqlserver中,Oracle转换成SqlServer数据库的步骤...

    1 背景 ITM系统目前支持MysqL.Oracle数据库,由于现在需要和CA产品进行结合,用CA产品的采集功能进行数据采集,因此需要使用CA产品的sqlServer数据库,为了使得系统支持sqlse ...

  2. linux查询数据库oracle端口,Oracle数据库常用命令、Linux监听配置、oracle linux下开放1521端口...

    Oracle数据库常用命令.Linux监听配置.oracle linux下开放1521端口 时间:2020-02-14 来源: 一.Linux下Oracle数据库常用命令 oracle用户下执行: $ ...

  3. oracle修改分区表的默认空间,Oracle数据库学习_Oracle分区表的分区占用空间为什么是8M?如何修改分区的初始空间?...

    Oracle数据库学习_Oracle分区表的分区占用空间为什么是8M?如何修改分区的初始空间? 现象一描述: 在oracle12c下创建一个分区表T_A_TRADING,新建一个分区P1,P1里没有任 ...

  4. Spark连接MySQL数据库并读取数据

    (作者:陈玓玏) 打开pyspark,带驱动的那种 用命令行启动pyspark时需要加上jdbc的驱动路径: pyspark --driver-class-path D:/Users/chendile ...

  5. centos7下载spark连接mysql数据库提取数据(pyspark,Scala,python独立执行)

    原文连接: http://dblab.xmu.edu.cn/blog/1724-2/ 原文连接:https://mapr.com/support/s/article/PySpark-to-MySQL- ...

  6. 使用RDS for MySQL数据库(本地连接、数据库迁移、JDBC操作)

    一.阿里云RDS介绍 什么是阿里云数据库RDS 阿里云关系型数据库(Relational Database Service,简称RDS)是一种稳定可靠.可弹性伸缩的在线数据库服务.基于阿里云分布式文件 ...

  7. java jdbc 连接mysql数据库,Java 通过JDBC连接Mysql数据库

    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...

  8. c++连接oracle数据库程序,无法从c++程序连接到我的oracle数据库

    我对使用数据库有点陌生.我一直在学习oraclesql,并在他们的网站上安装了oraclexpressedition18c.我通常通过提供的sql*Plus工具执行sql查询.现在,我真的很想能够从我 ...

  9. 用Navicat连接Oracle数据库时报错ORA-28547:connection to server failed, probable Oracle Net admin error...

    用Navicat连接Oracle数据库时出现如下错误 上网一查原来是oci.dll版本不对.因为Navicat是通过Oracle客户端连接Oracle服务器的,Oracle的客户端分为两种,一种是标准 ...

最新文章

  1. 青岛大学计算机学院生物信息研究组(苏晓泉团队)招生与招聘启事
  2. 马斯克为了解决堵车挖的隧道,已经堵上了
  3. win8计算机安全模式,Win8如何进入安全模式
  4. 1.13 实例:用户修改密码
  5. C语言拼接字符串 -- 使用strcat()函数
  6. C#仿QQ皮肤-常用用户控件EnterFrom1和窗体EntryForm的实现
  7. java redis 重连机制_redis在java中的客户端连接
  8. android root su sticky bit
  9. 空号检测平台使用说明
  10. 【从零搭建一个淘宝客公众号02】- 基于koa搭建后台
  11. 【Homography Estimation】《Deep Image Homography Estimation》
  12. 我用前世的五百次回眸换今生与你一次擦肩而过
  13. CTA-敏感行为-复制到剪切板/从剪切板粘贴
  14. MOOCad Visual Analysis of Anomalous Learing Activities in Massive Open Online Courses
  15. 华为机试:计算最大乘积
  16. 布局篇-WrapPanel布局
  17. Python爬取天气数据及可视化分析(附源码)
  18. HTML5方方面面的活动报道,大家来吐槽啊
  19. w311m linux驱动下载,腾达W311MI网卡驱动
  20. i59400f和i510400f打游戏差距大不大

热门文章

  1. guns 最新开源框架企业版下载_优秀!Github上10个开源免费的后台控制面板你值得拥有!...
  2. 五元一次方程组计算器_人教版初中数学七年级下册列一元一次不等式解实际问题公开课优质课课件教案视频...
  3. mysql Sql slow log_MySQL慢查询日志(SLOW LOG)
  4. java变量设置_配置环境变量
  5. java 找不到符号变量_java编程找不到符号
  6. android app打开流程_App冷启动,你还要我怎样?
  7. oracle数据库res,ipcs、ipcrm、sysresv、kernel.shmmax
  8. OpenCV对图像进行尺寸变换
  9. 种豆得豆,种瓜得瓜 : 你的网络就是一片自留地
  10. pyBoard定时器中断中不能够做什么操作? MicroPython,pyBoard