Spark JDBC 读取仅在一个分区中结束

Posted

技术标签:

【中文标题】Spark JDBC 读取仅在一个分区中结束【英文标题】:Spark JDBC read ends up in one partition only 【发布时间】:2019-02-28 13:57:08 【问题描述】:

我有以下代码 sn-p 用于从 Postgresql 表中读取数据,我从中提取所有可用数据,即select * from table_name

 jdbcDF = spark.read \
    .format("jdbc") \
    .option("url", self.var_dict['jdbc_url']) \
    .option("dbtable", "(0) as subq".format(query)) \
    .option("user", self.var_dict['db_user']) \
    .option("password", self.var_dict['db_password']) \
    .option("driver", self.var_dict['db_driver']) \
    .option("numPartitions", 10) \
    .option("fetchsize", 10000) \
    .load()

其中 var_dict 是一个字典,其中包含我的变量,例如 spark 上下文、数据库凭据等。

即使我提取数百万行,下面代码的结果也总是返回 1:

partitions_num = jdbcDF.rdd.getNumPartitions()

如果我在这里做错了什么,有人可以建议吗?理想情况下,我应该使用最大的可用资源,而不是仅将数据拉到我的主节点。

partitionColumn、lowerBound、upperBound 不能使用,因为我的分区列是时间戳而不是数字。

【问题讨论】:

Partitioning in spark while reading from RDBMS via JDBC的可能重复 请在此处查看我的答案:***.com/a/40938905/2639647 【参考方案1】:

从 spark 2.4.0 开始,日期和时间戳列也支持分区, https://issues.apache.org/jira/browse/SPARK-22814

【讨论】:

以上是关于Spark JDBC 读取仅在一个分区中结束的主要内容,如果未能解决你的问题,请参考以下文章

Spark通过JDBC读取RDBMS时是不是有参数分区?

Spark读取JDBC调优

仅在处理完我的 RDD 中的所有分区后,如何在 Spark Streaming 中接收输入?

Spark设备上没有剩余空间

Spark如何仅在分区内加入

请教一个关于使用spark 读取kafka只能读取一个分区数据的问题