输出火花中的空文件
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
- 这可以提高压缩率。
我正在像下面这样写我的数据框
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
- 这可以提高压缩率。