我正在编写我的数据框,如下所示
df.write().format("com.databricks.spark.avro").save("path");
然而,我得到大约200个文件,其中大约30-40个文件是空的。我可以理解它可能是由于空分区。然后我更新了我的代码,如
df.coalesce(50).write().format("com.databricks.spark.avro").save("path");
但我觉得它可能影响性能。是否有其他更好的方法来限制输出文件的数量并删除空文件
答案 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
- 这可以提高压缩率。