【发布时间】:2018-07-03 23:56:45
【问题描述】:
Databricks 文档提到,在跨多个工作人员从关系数据库读取数据时,我们必须提供“partitionColumn、lowerBound、upperBound 和 numPartitions”值。还提到partitionColumn应该是一个整数列。然后如何从没有整数列的表中进行并行读取?
我尝试使用“rownum”(来源是 Oracle DB)作为分区列,但是当我尝试将结果存储在数据帧中时,我只从第一个分区获取数据。
代码如下:
jdbcUrl = "jdbc:oracle:thin:@//{0}:{1}/{2}".format(hostname, port, db)
connectionProperties = {
"user" : 'XXXXXX',
"password" : 'XXXXXX',
"driver" : "oracle.jdbc.driver.OracleDriver",
"oracle.jdbc.timezoneAsRegion" : "false"
}
parallel_df = spark.read.jdbc(url=jdbcUrl,
table=table_name,
column='rownum',
lowerBound=1,
upperBound=200000,
numPartitions=20,
properties=connectionProperties)
当我得到 parallel_df 的计数时,我只得到 200000/20 = 10000 行。谁能提供有关如何执行此并行读取的任何见解?
【问题讨论】:
-
您可以使用
predicates,但具体用法取决于数据。