输出火花中的空文件

时间:2017-05-18 04:00:12

标签: 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");

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

3 个答案:

答案 0 :(得分:1)

您可以使用RDD方法删除repartition中的空分区,然后再使用partitions = number of cores * 4方法。

默认分区为200。

建议的分区数是sudo apt-get install libxss1 libappindicator1 libindicator7 wget https://dl.google.com/linux/direct/google-chrome- stable_current_amd64.deb sudo dpkg -i google-chrome*.deb sudo apt-get install -f

的数量

答案 1 :(得分:1)

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

答案 2 :(得分:1)

默认没有。 RDD分区是200;你必须洗牌才能删除偏斜的分区。

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

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

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

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