spark写入磁盘,N个文件少于N个分区

时间:2018-01-08 01:20:33

标签: apache-spark partition

我们可以写数据说100个文件,每个文件有10个分区吗?

我知道我们可以使用重新分区或合并来减少分区数量。但是我看到一些hadoop生成的avro数据包含的分区比文件数量多得多。

1 个答案:

答案 0 :(得分:4)

写出的文件数由DataFrame或RDD的并行化控制。因此,如果您的数据分布在10个Spark分区中,则无法在不减少分区的情况下编写少于10个文件(例如coalescerepartition)。

现在,已经说过,当数据被回读时,它可以根据你配置的分割大小分成更小的块,但取决于格式和/或压缩。

如果您希望增加每个Spark分区写入的文件数(例如,为了防止文件过大),Spark 2.2在您写出数据时会引入maxRecordsPerFile选项。使用此功能,您可以限制每个分区中每个文件写入的记录数。另一种选择当然是重新分配。

以下将导致2个文件被写出,即使它只有1个分区:

val df = spark.range(100).coalesce(1)
df.write.option("maxRecordsPerFile", 50).save("/tmp/foo")