输出火花中的空文件

Empty Files in output spark

我正在像下面这样写我的数据框

df.write().format("com.databricks.spark.avro").save("path");

但是我得到了大约 200 个文件,其中大约 30-40 个文件 empty.I 可以理解这可能是由于空分区造成的。然后我更新了我的代码,比如

df.coalesce(50).write().format("com.databricks.spark.avro").save("path");

但我觉得这可能会影响性能。有没有其他更好的方法来限制输出文件的数量和删除空文件

您可以在使用repartition方法写入之前删除RDD中的空分区。

默认分区为200。

建议分区数为partitions = number of cores * 4

使用 this method 重新分区您的数据框。为了消除偏斜并确保数据的均匀分布,请在数据框中为 partitionExprs 参数选择具有高基数(列中具有唯一数量的值)的列,以确保均匀分布。

默认没有。 RDD 分区数为 200;您必须进行随机播放以删除倾斜的分区。

您可以在 RDD 上使用 repartition 方法;或在数据帧上使用 DISTRIBUTE BY 子句 - 它将重新分区并在分区之间均匀分布数据。

def repartition(numPartitions: Int, partitionExprs: Column*): Dataset[T]

Returns 具有适当分区的数据集实例。

您可以使用 repartitionAndSortWithinPartitions - 这可以提高压缩率。