DataFrame numPartitions 默认值

Posted

技术标签:

【中文标题】DataFrame numPartitions 默认值【英文标题】:DataFrame numPartitions default value 【发布时间】:2020-07-09 12:18:20 【问题描述】:

我正在尝试使用 JDBC 从数据库表中读取内容:

val df = spark.read.jdbc("<database url>", "<some table name>", <some DbProperties>)

然后将其写入另一个数据库:

df.write.mode(SaveMode.Append).jdbc("<other database url>", "<same table name>", <some DbProperties>)
    如果我们没有在 Db 属性中指定 numPartitions 选项,那么 numPartitions Spark 用于将表从数据库读取到 df 的默认值是多少? 如果我想将上面的df写入另一个数据库的另一个表中,如果我仍然不指定numPartitions,写入数据库时​​是否会创建并行连接? 假设在阅读时我将 numPartitions 设为 8,而在将此 df 写入目标数据库时,如果我在写入时没有明确指定 numPartitions = 8 仍然有效吗?

【问题讨论】:

***.com/questions/43150694/… 的可能重复项 【参考方案1】:

如果您未指定 partitionColumnlowerBoundupperBoundnumPartitionspredicates,Spark 将使用单个执行程序并创建单个非空分区。所有数据都将使用单个事务处理,读取既不会分布式也不会并行化。

另见:

How to optimize partitioning when migrating data from JDBC source? How to improve performance for slow Spark jobs using DataFrame and JDBC connection?

有关 spark JDBC 集成的更多信息,请查看 spark 文档

https://spark.apache.org/docs/2.3.2/sql-programming-guide.html#jdbc-to-other-databases

【讨论】:

好吧,假设我在阅读 DataFrame 时给出了numPartitions,在编写相同的df 时是否会使用相同的numPartitions(在编写时没有明确指定)(Qn。# 3)? 运行 df.write 时,df 中的每个原始分区都是独立写入的。但如果您还添加numPartitions 作为最佳做法。 好的,这意味着在写入数据库时​​会保留相同的numPartitions,而无需我明确指定,对吗?

以上是关于DataFrame numPartitions 默认值的主要内容,如果未能解决你的问题,请参考以下文章

两个非常相似的 Spark Dataframe 之间性能差异的可能原因

Spark Streaming Kafka 接收器 API - numPartitions

使用 reduceByKey(numPartitions) 或 repartition 规范化 SPARK RDD 分区

spark-submit 中的 num-executors、executor-cores、executor-memory 与 spark.read 中的 option(“numPartitions”,

coalesce

Spark transformation算子之coalesce&&repartition