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 =