如何在 Spark Structured Streaming 中控制输出文件的大小

Posted

技术标签:

【中文标题】如何在 Spark Structured Streaming 中控制输出文件的大小【英文标题】:How to control output files size in Spark Structured Streaming 【发布时间】:2019-02-14 11:46:49 【问题描述】:

我们正在考虑在一个项目中使用 Spark Structured Streaming。输入和输出是 S3 存储桶上的拼花文件。是否可以以某种方式控制输出文件的大小?我们的目标是输出大小为 10-100MB 的文件。 据我了解,在传统的批处理方法中,我们可以通过根据输入数据集的大小调整分区数量来确定输出文件的大小,在结构化流中是否有类似的可能?

【问题讨论】:

【参考方案1】:

在 Spark 2.2 或更高版本中,最佳选项是设置 spark.sql.files.maxRecordsPerFile

spark.conf.set("spark.sql.files.maxRecordsPerFile", n)

n 被调整以反映行的平均大小。

SPARK-18775 - 限制每个文件写入的最大记录数。 apache/spark@354e936187708a404c0349e3d8815a47953123ec

【讨论】:

谢谢!奇怪的是,它没有记录在官方文档中。它应该消除太大的文件。任何想法如何处理太小的文件? 另外,我在这里找到了类似的选项spark.sql.files.maxPartitionBytes:spark.apache.org/docs/latest/… maxPartitionBytes 是读者选项,而不是作家选项。至于你的另一个问题 - 合并/重新分区是唯一的选择,而且真的不是一个好的或可调的。 作为所有者愿意接受答案吗?如果您还好,请接受关闭此线程的答案 @r.gl 现在记录在这里spark.apache.org/docs/latest/configuration.html

以上是关于如何在 Spark Structured Streaming 中控制输出文件的大小的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 在 Spark Structured Streaming 中查看特定指标

如何在 Spark Structured Streaming 中控制输出文件的大小

如何在 Spark Structured Streaming 中向 DataFrame 添加几列(仍未填充)

如何使用 Scala Case Class 在 Spark Structured Streaming 中映射 Kafka 源

如何从 Spark Structured Streaming 刷新 Hive/Impala 表?

如何在不使用 flatMapsGroupWithState 的情况下使用 Structured Streaming 2.3.0 在 spark 中进行无状态聚合?