Apache spark 输出spark中的空文件

Apache spark 输出spark中的空文件,apache-spark,databricks,Apache Spark,Databricks,我正在写我的数据框,如下所示 df.write().format("com.databricks.spark.avro").save("path"); 然而,我得到大约200个文件,其中大约30-40个文件是空的。我可以理解这可能是由于空分区。然后我更新了我的代码,就像 df.coalesce(50).write().format("com.databricks.spark.avro").save("path"); 但我觉得这可能会影响性能。是否有其他更好的方法来限制输出文件的数量并删除空文

我正在写我的数据框,如下所示

df.write().format("com.databricks.spark.avro").save("path");
然而,我得到大约200个文件,其中大约30-40个文件是空的。我可以理解这可能是由于空分区。然后我更新了我的代码,就像

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

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

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

默认分区是200


建议的分区数为
分区数=核心数*4

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

默认分区是200


建议的分区数是
分区数=核心数*4

使用重新分区数据帧。要消除倾斜并确保数据的均匀分布,请为partitionExprs参数选择dataframe中具有高基数(列中具有唯一数量的值)的列以确保均匀分布

使用重新划分数据帧。要消除倾斜并确保数据的均匀分布,请为partitionExprs参数选择dataframe中具有高基数(列中具有唯一数量的值)的列以确保均匀分布

默认RDD分区的数量为200;您必须执行洗牌来删除倾斜的分区

您可以在RDD上使用
重新分区
方法;或者使用dataframe上的
distributby
子句,它将在分区之间均匀地分配数据的同时重新分区

def repartition(numPartitions: Int, partitionExprs: Column*): Dataset[T]
返回具有正确分区的数据集实例


您可以使用
重新分区和SortWithinPartitions
,这可以提高压缩比。

因为RDD分区的默认数量是200;您必须执行洗牌来删除倾斜的分区

您可以在RDD上使用
重新分区
方法;或者使用dataframe上的
distributby
子句,它将在分区之间均匀地分配数据的同时重新分区

def repartition(numPartitions: Int, partitionExprs: Column*): Dataset[T]
返回具有正确分区的数据集实例

您可以使用
重新分区和SortWithinPartitions
——这可以提高压缩比