我正在尝试将拼板数据从另一个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上运行一个胶水脚本,脚本如下:
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/")
发布于 2020-06-30 04:43:23
在读取星区集群中的数据时,设置spark.sql.files.maxPartitionBytes
确实会影响分区的最大大小。如果输出后的最后文件太大,那么我建议减少此设置的值,它应该创建更多的文件,因为输入数据将分布在更多的分区中。但是,如果查询中有任何洗牌,则这将不是真的,因为它将始终被重新划分为spark.sql.shuffle.partitions
设置提供的分区数。
此外,文件的最终大小将取决于您将使用的文件格式和压缩。因此,如果将数据输出到例如拼板中,文件将比输出到csv或json的文件小得多。
发布于 2022-02-22 05:34:16
您可以使用"spark.sql.files.maxRecordsPerFile"
限制可以写入一个拼花文件中的最大记录数,从而控制文件的最大大小。
https://stackoverflow.com/questions/62648621
复制相似问题