Spark 重新分区未按预期工作

BdE*_*eer -1 datastax apache-spark parquet apache-spark-sql

我使用的是spark-sql 2.3.1,我设置

spark.sql.shuffle.partitions=40 
Run Code Online (Sandbox Code Playgroud)

在我的代码中'

val partitioned_df =  vals_df.repartition(col("model_id"),col("fiscal_year"),col("fiscal_quarter"))
Run Code Online (Sandbox Code Playgroud)

当我说

println(" Number of partitions : " + partitioned_df.rdd.getNumPartitions)
Run Code Online (Sandbox Code Playgroud)

它给出 40 作为输出,事实上重新分区后理想情况下计数应该在 400 左右,为什么重新分区在这里不起作用?我在这里做错了什么?如何修复它?

Rap*_*oth 5

这是可以预料的,状态的 scaladocrepartition

返回由给定分区表达式分区的新数据集,使用spark.sql.shuffle.partitions作为分区数。生成的数据集经过哈希分区。

也许你对重新分区的理解是错误的。当您按列重新分区时c,具有相同值的所有行都c位于同一分区中,但 1 个分区可以容纳多个值c

  • @Raphael Roth,我的目标是在所有分区中均匀分布数据。我的公司拥有 20 年来的数据,而且数据还在不断增长。数据按年份和季度存储在表中。如果我按“年”,“季度”分区,有些分区有几百条记录,最近几年每个季度只有几百万条记录,所以当我按照上面的方式分区时,数据并不是均匀分布在所有分区中的。如何使数据均匀分布在所有 parquet 文件或分区中?请建议我,我应该遵循什么逻辑? (2认同)