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】:如果您未指定 partitionColumn
、lowerBound
、upperBound
、numPartitions
或 predicates
,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”,