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
——这可以提高压缩比