writeStream of spark生成许多小文件



我正在使用Spark Structured Streaming(2.3(将镶木地板数据写入云中的存储桶(Google Cloud Storage(。 我正在使用以下功能:

def writeStreaming(data: DataFrame, format: String, options: Map[String, String], partitions: List[String]): DataStreamWriter[Row] = {
var dataStreamWrite = data.writeStream .format(format).options(options).trigger(Trigger.ProcessingTime("120 seconds"))
if (!partitions.isEmpty)
dataStreamWrite = ddataStreamWrite.partitionBy(partitions: _*)
dataStreamWrite

}

不幸的是,使用这种方法,我得到了许多小文件。

我试图使用触发器方法来避免这种情况,但这也没有用。请问您对如何处理此问题有任何想法吗? 多谢

尽管使用了触发器,但仍有许多小文件的原因可能是数据帧具有许多分区。要将镶木地板减少到 1 个文件/2 分钟,您可以在写入镶木地板文件之前合并到一个分区。

var dataStreamWrite = data
.coalesce(1)
.writeStream 
.format(format)
.options(options)
.trigger(Trigger.ProcessingTime("120 seconds"))

最新更新