Spark SQL获得max& min动态地从数据源

时间:2017-01-03 14:17:58

标签: apache-spark pyspark apache-spark-sql pyspark-sql databricks

我正在使用Spark SQL,我想每天从Oracle表中获取整个数据(包含超过1800k的记录)。当我从Oracle读取时应用程序挂起,因此我使用了 partitionColumn,lowerBound&的概念。 UPPERBOUND 即可。但是,问题是如何才能获得 owerBound&动态主键列的upperBound值 ??每天的lowerBound&的价值upperBound将会发生变化。如何动态获取主键列的边界值?任何人都可以为我的问题指导一个示例吗?

1 个答案:

答案 0 :(得分:2)

只需从数据库中获取所需的值:

url = ...
properties = ...
partition_column = ...
table = ...

# Push aggregation to the database
query = "(SELECT min({0}), max({0}) FROM {1}) AS tmp".format(
    partition_column, table
)

(lower_bound, upper_bound) = (spark.read
    .jdbc(url=url, table=query. properties=properties)
    .first())

并传递给主查询:

num_partitions = ...

spark.read.jdbc(
    url, table, 
    column=partition_column, 
    # Make upper bound inclusive 
    lowerBound=lower_bound, upperBound=upper_bound + 1, 
    numPartitions=num_partitions, properties=properties
)