首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >spark.sql.files.maxPartitionBytes不限制写入分区的最大大小

spark.sql.files.maxPartitionBytes不限制写入分区的最大大小
EN

Stack Overflow用户
提问于 2020-06-30 00:36:36
回答 2查看 10.1K关注 0票数 1

我正在尝试将拼板数据从另一个s3桶复制到我的s3桶中。我希望将每个分区的大小限制为128 MB。我认为默认情况下,spark.sql.files.maxPartitionBytes应该设置为128 MB,但是当我在复制后查看s3中的分区文件时,我会看到大约226 MB的单个分区文件。我看了这篇文章,它建议我设置这个星火配置键,以限制分区的最大大小:Limiting maximum size of dataframe partition,但它似乎不起作用吗?

这是配置键的定义:

读取文件时要打包到单个分区的最大字节数。此配置仅在使用Parquet、JSON和ORC等基于文件的源时才有效。

我也有点困惑,这是如何与大小的书面拼花文件。

作为参考,我正在胶水1.0版spark 2.4上运行一个胶水脚本,脚本如下:

代码语言:javascript
运行
复制
val conf: SparkConf = new SparkConf()
conf.set("spark.sql.catalogImplementation", "hive")
    .set("spark.hadoop.hive.metastore.glue.catalogid", catalogId)
val spark: SparkContext = new SparkContext(sparkConf)

val glueContext: GlueContext = new GlueContext(spark)
val sparkSession = glueContext.getSparkSession

val sqlDF = sparkSession.sql("SELECT * FROM db.table where id='item1'")
sqlDF.write.mode(SaveMode.Overwrite).parquet("s3://my-s3-location/")
EN

回答 2

Stack Overflow用户

发布于 2020-06-30 04:43:23

在读取星区集群中的数据时,设置spark.sql.files.maxPartitionBytes确实会影响分区的最大大小。如果输出后的最后文件太大,那么我建议减少此设置的值,它应该创建更多的文件,因为输入数据将分布在更多的分区中。但是,如果查询中有任何洗牌,则这将不是真的,因为它将始终被重新划分为spark.sql.shuffle.partitions设置提供的分区数。

此外,文件的最终大小将取决于您将使用的文件格式和压缩。因此,如果将数据输出到例如拼板中,文件将比输出到csv或json的文件小得多。

票数 6
EN

Stack Overflow用户

发布于 2022-02-22 05:34:16

您可以使用"spark.sql.files.maxRecordsPerFile"限制可以写入一个拼花文件中的最大记录数,从而控制文件的最大大小。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62648621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档