为什么我在基于具有 12 个不同值的列进行分区后得到更多分区
Why am I getting more Partitions after Partitioning based on a column that has 12 different values
df = spark.read.format().load(path)
df.write.mode(WriteMode.Overwrite).format().partitionBy("ColumnX").save(path)
注意:ColumnX 有 12 个不同的值
df_partitioned = spark.read.format().load(path)
print(df_partitioned.rdd.getNumPartitions())
output: 80
为什么我得到的是 80 而不是 12
当您基于默认的并行性默认读取数据/数据帧时,rdd 正在分区。如果您想确保发生分区的数量,请在 n 是您要提供的数量时使用 repartition(n)。
df.repartition(10).write.mode(WriteMode.Overwrite).format().partitionBy("ColumnX").save(路径)
在Spark中,“分区”一词是指内存分区和磁盘分区。 df_partitioned
有80个内存分区和12个磁盘分区。 repartition
和 coalesce
更改内存分区数,如 here. partitionBy
changes the number of disk partitions as described here 所述。
内存分区和磁盘分区不同,但术语使它们听起来相同,所以您会感到困惑,这是可以理解的。
这些都会写出不同数量的文件:
// approach 1
df
.repartition(col("ColumnX"))
.write
.partitionBy("ColumnX")
.parquet(outputPath)
// approach 2
df
.repartition(5)
.write
.partitionBy("ColumnX")
.parquet(outputPath)
// approach 3
df
.repartition(8, col("ColumnX"), rand)
.write
.csv(outputPath)
df = spark.read.format().load(path)
df.write.mode(WriteMode.Overwrite).format().partitionBy("ColumnX").save(path)
注意:ColumnX 有 12 个不同的值
df_partitioned = spark.read.format().load(path)
print(df_partitioned.rdd.getNumPartitions())
output: 80
为什么我得到的是 80 而不是 12
当您基于默认的并行性默认读取数据/数据帧时,rdd 正在分区。如果您想确保发生分区的数量,请在 n 是您要提供的数量时使用 repartition(n)。
df.repartition(10).write.mode(WriteMode.Overwrite).format().partitionBy("ColumnX").save(路径)
在Spark中,“分区”一词是指内存分区和磁盘分区。 df_partitioned
有80个内存分区和12个磁盘分区。 repartition
和 coalesce
更改内存分区数,如 here. partitionBy
changes the number of disk partitions as described here 所述。
内存分区和磁盘分区不同,但术语使它们听起来相同,所以您会感到困惑,这是可以理解的。
这些都会写出不同数量的文件:
// approach 1
df
.repartition(col("ColumnX"))
.write
.partitionBy("ColumnX")
.parquet(outputPath)
// approach 2
df
.repartition(5)
.write
.partitionBy("ColumnX")
.parquet(outputPath)
// approach 3
df
.repartition(8, col("ColumnX"), rand)
.write
.csv(outputPath)