spark-jdbc-oracle(scala)
来源:互联网 发布:linux下如何查找文件 编辑:程序博客网 时间:2024/06/07 05:56
jdbc 读取oracle数据
JDBC connection properties
属性名称和含义
url:要连接的JDBC URL。列如:jdbc:mysql://ip:3306
dbtable:应该读取的JDBC表。可以使用括号中的子查询代替完整表。
driver:用于连接到此URL的JDBC驱动程序的类名,列如:com.mysql.jdbc.Driver
partitionColumn, lowerBound, upperBound, numPartitions:
这些options仅适用于read数据。这些options必须同时被指定。他们描述,如何从多个workers并行读取数据时,分割表。
partitionColumn:必须是表中的数字列。
lowerBound和upperBound仅用于决定分区的大小,而不是用于过滤表中的行。
表中的所有行将被分割并返回。
fetchsize:仅适用于read数据。JDBC提取大小,用于确定每次获取的行数。这可以帮助JDBC驱动程序调优性能,这些驱动程序默认具有较低的提取大小(例如,Oracle每次提取10行)。
batchsize:仅适用于write数据。JDBC批量大小,用于确定每次insert的行数。
这可以帮助JDBC驱动程序调优性能。默认为1000。
isolationLevel:仅适用于write数据。事务隔离级别,适用于当前连接。它可以是一个NONE,READ_COMMITTED,READ_UNCOMMITTED,REPEATABLE_READ,或SERIALIZABLE,对应于由JDBC的连接对象定义,缺省值为标准事务隔离级别READ_UNCOMMITTED。请参阅文档java.sql.Connection。
truncate:仅适用于write数据。当SaveMode.Overwrite启用时,此选项会truncate在MySQL中的表,而不是删除,再重建其现有的表。这可以更有效,并且防止表元数据(例如,索引)被去除。但是,在某些情况下,例如当新数据具有不同的模式时,它将无法工作。它默认为false。
createTableOptions:仅适用于write数据。此选项允许在创建表(例如CREATE TABLE t (name string) ENGINE=InnoDB.)时设置特定的数据库表和分区选项。
方式一
val prop = new java.util.Properties prop.setProperty("user", stateConf.getString(Constant.JdbcUserName)) prop.setProperty("password", stateConf.getString(Constant.JdbcPasswd)) val tableName = "test" val sql = s"select id,REPORT_TIME from $tableName" //Condition in the where clause for each partition. val predicates = Array( "2015-09-16" -> "2015-09-30", "2015-10-01" -> "2015-10-15", "2015-10-16" -> "2015-10-31", "2015-11-01" -> "2015-11-14", "2015-11-15" -> "2015-11-30", "2015-12-01" -> "2015-12-15" ).map { case (start, end) => s"cast(REPORT_TIME as date) >= date '$start' " + s"AND cast(REPORT_TIME as date) <= date '$end'" } sparkSession.read.jdbc( stateConf.getString(Constant.JdbcUrl), s"($sql) a", predicates: Array[String], prop: Properties )
方式二
val tableName = "test" val sql = s"select VID,REPORT_TIME from $tableName" val allDayReportDS = sparkSession.read.format("jdbc") .options( Map( //"jdbc:oracle:thin:username/password@//192.168.0.89:1521/epps" JDBCOptions.JDBC_URL -> s"jdbc:oracle:thin:${stateConf.getString(Constant.JdbcUserName)}/${stateConf.getString(Constant.JdbcPasswd)}@//${stateConf.getString("host")}/${stateConf.getString("database")}", JDBCOptions.JDBC_TABLE_NAME -> s"(select id,REPORT_TIME from $tableName) a", JDBCOptions.JDBC_DRIVER_CLASS -> s"${stateConf.getString(Constant.JdbcDriver)}", JDBCOptions.JDBC_PARTITION_COLUMN -> "REPORT_TIME", //必须是数字列 JDBCOptions.JDBC_LOWER_BOUND -> "1", JDBCOptions.JDBC_UPPER_BOUND -> "1000", JDBCOptions.JDBC_NUM_PARTITIONS -> "5", JDBCOptions.JDBC_BATCH_FETCH_SIZE -> "10", JDBCOptions.JDBC_TRUNCATE -> "false", JDBCOptions.JDBC_CREATE_TABLE_OPTIONS -> "CREATE TABLE t (name string) ENGINE=InnoDB DEFAULT CHARSET=utf8", JDBCOptions.JDBC_BATCH_INSERT_SIZE -> "1000", JDBCOptions.JDBC_TXN_ISOLATION_LEVEL -> "READ_UNCOMMITTED" ) ) .load()
写操作
方式一
val prop = new java.util.Properties prop.setProperty("user", stateConf.getString(Constant.JdbcUserName)) prop.setProperty("password", stateConf.getString(Constant.JdbcPasswd)) prop.setProperty("batchsize", "10") prop.setProperty("isolationLevel", "READ_UNCOMMITTED") result.write.jdbc(stateConf.getString(Constant.JdbcUrl), "TEST", prop)
方式二
result.write .partitionBy("time") .mode(SaveMode.Overwrite) .format("jdbc") .option("url", stateConf.getString(Constant.JdbcUrl)) .option("user", stateConf.getString(Constant.JdbcUserName)) .option("password", stateConf.getString(Constant.JdbcPasswd)) .option(JDBCOptions.JDBC_TABLE_NAME, "TEST") .option(JDBCOptions.JDBC_TRUNCATE, "true") .option(JDBCOptions.JDBC_BATCH_INSERT_SIZE, "1000") .option(JDBCOptions.JDBC_TXN_ISOLATION_LEVEL, "READ_UNCOMMITTED") // .option("createTableOptions", "ENGINE tableEngineName") .option(JDBCOptions.JDBC_CREATE_TABLE_OPTIONS, "CREATE TABLE t (name string) ENGINE=InnoDB DEFAULT CHARSET=utf8") .save()
- spark-jdbc-oracle(scala)
- Spark---Datasource(JDBC)---Scala
- Spark-特征选择(scala)
- spark,scala
- Spark(七) -- Scala快速入门
- spark连接数据库操作(scala实现)
- Spark——二次排序(scala)
- spark集群搭建(Hadoop、Scala)
- spark向量矩阵的使用(scala)
- Spark二次排序(Java+Scala)
- spark(4)--scala入门扫盲(2)
- spark 压缩解压文件(基于scala)
- Scala Spark 连接 HBase ( IDEA) 调试Spark Standalone
- spark(1)-入门spark之scala sbt wordcount实验
- 【Bug】Spark sql jdbc fails for Oracle NUMBER type columns
- jdbc(Oracle数据库)
- scala 开发spark程序
- scala for spark
- Centos6安装Caffe
- 静态变量、局部变量、实例变量
- Java多线程工具包java.util.concurrent---目录
- 1015. 德才论 (25) PAT乙级真题
- Google Data Binding Library 谷歌官方数据绑定库(八)转换
- spark-jdbc-oracle(scala)
- Android 的 Event Log
- Error: no override found for 'vtkPolyDataMapper'. 和Warning: Link to vtkInteractionStyle for default
- bzoj1412: [ZJOI2009]狼和羊的故事(最小割)
- (新)颈椎病康复指南
- 职业生涯指南——附神级跳槽攻略图!
- 工作中 最让程序员生气的十件事情
- 支撑程序员的三种精神
- ecshop文件夹权限