使用Spark SQL JDBC数据源参数dbtable和partitionColumn查询主键范围

时间:2019-06-17 12:50:17

标签: mysql apache-spark jdbc pyspark apache-spark-sql

我正在使用spark查询带有主键列的mysql表。我不需要从整个表中读取数据,而是从特定的主键值读取数据,例如primary_key>5001。但是,当我使用带有上限和下限的partitionBy时,其中一个分区会读取primary_key <5001的数据。我知道这是根据设计读取表中所有数据的方法。但是,如果我只想读取一定范围的主键并且由于数据量巨大而需要对其进行分区,该怎么办。

我尝试了这样的子查询:

    .option("dbtable", "(select * from %s where %s>%s)tmp"% 
    (tablename,pk,lowerbound)) \
    .option("partitionColumn", pk) \
    .option("lowerbound", lowerbound) \
    .option("upperbound", upperbound) \
    .option("numPartitions", numPartitions) \
    .load()

但这将为每个分区的子查询启动多个查询。这意味着子查询将被执行的次数为numPartions。
是否可以将这些spark分区步幅应用于子查询或mysql表中的值范围。

0 个答案:

没有答案