【发布时间】:2018-11-14 17:31:41
【问题描述】:
在由year 和month 划分的镶木地板数据湖中,spark.default.parallelism 设置为即4,假设我想创建一个由 2017 年的第 11~12 个月和第 1~ 个月组成的 DataFrame 3 个来自 2018 年的两个来源 A 和 B。
df = spark.read.parquet(
"A.parquet/_YEAR={2017}/_MONTH={11,12}",
"A.parquet/_YEAR={2018}/_MONTH={1,2,3}",
"B.parquet/_YEAR={2017}/_MONTH={11,12}",
"B.parquet/_YEAR={2018}/_MONTH={1,2,3}",
)
如果我得到分区数,Spark 默认使用spark.default.parallelism:
df.rdd.getNumPartitions()
Out[4]: 4
考虑到在创建df 后,我需要在每个时期执行join 和groupBy 操作,并且数据或多或少均匀分布在每个时期(每个时期大约1000 万行):
问题
- 重新分区会提高我后续操作的性能吗?
- 如果是这样,如果我有 10 个不同的时期(A 和 B 每年 5 个),我是否应该按时期数重新分区并明确引用要重新分区的列 (
df.repartition(10,'_MONTH','_YEAR'))?
【问题讨论】:
标签: apache-spark pyspark partitioning parquet