空文件输出火花
问题描述:
我写我的数据帧像下面空文件输出火花
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");
但我觉得它可能会影响性能。有没有其他更好的方法来限制输出文件的数量和删除空文件
答
答
重新分区您的数据帧的数量。为了消除偏差并确保数据的均匀分布,请为partitionExprs参数在数据框中选择具有高基数(列中具有唯一值的列)的列以确保均匀分布。
答
默认没有。的RDD分区是200;你必须做洗牌来清除偏斜的分区。
您可以在RDD上使用repartition
方法;或在数据帧上使用DISTRIBUTE BY
子句 - 这将重新分区,并在分区之间均匀分配数据。
def repartition(numPartitions: Int, partitionExprs: Column*): Dataset[T]
返回具有适当分区的数据集实例。
您可以使用repartitionAndSortWithinPartitions
- 这可以提高压缩率。