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

Apache spark spark.sql.files.maxPartitionBytes不限制写入分区的最大大小,apache-spark,apache-spark-sql,aws-glue,Apache Spark,Apache Spark Sql,Aws Glue,我正在尝试将拼花数据从另一个s3木桶复制到我的s3木桶。我想将每个分区的大小限制为最大128MB。我原以为默认情况下,spark.sql.files.maxPartitionBytes会被设置为128MB,但当我在复制后查看s3中的分区文件时,我看到的是226MB左右的单个分区文件。我在看这篇文章,它建议我设置spark配置键以限制分区的最大大小:但它似乎不起作用 这是该配置键的定义: 在以下情况下要打包到单个分区中的最大字节数: 读取文件。此配置仅在使用时有效 基于文件的源代码,如拼花、JSO

我正在尝试将拼花数据从另一个s3木桶复制到我的s3木桶。我想将每个分区的大小限制为最大128MB。我原以为默认情况下,spark.sql.files.maxPartitionBytes会被设置为128MB,但当我在复制后查看s3中的分区文件时,我看到的是226MB左右的单个分区文件。我在看这篇文章,它建议我设置spark配置键以限制分区的最大大小:但它似乎不起作用

这是该配置键的定义:

在以下情况下要打包到单个分区中的最大字节数: 读取文件。此配置仅在使用时有效 基于文件的源代码,如拼花、JSON和ORC

我也有点困惑,这和书面拼花文件的大小有什么关系

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

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/")

读取spark集群上的数据时,设置
spark.sql.files.maxPartitionBytes
确实会影响分区的最大大小。如果输出后的最终文件太大,那么我建议降低此设置的值,它应该创建更多文件,因为输入数据将分布在更多分区中。但是,如果查询中有任何无序排列,则不会出现这种情况,因为这样它将始终被重新划分到
spark.sql.shuffle.partitions
设置给定的分区数中


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

读取spark集群上的数据时,设置
spark.sql.files.maxPartitionBytes
确实会影响分区的最大大小。如果输出后的最终文件太大,那么我建议降低此设置的值,它应该创建更多文件,因为输入数据将分布在更多分区中。但是,如果查询中有任何无序排列,则不会出现这种情况,因为这样它将始终被重新划分到
spark.sql.shuffle.partitions
设置给定的分区数中


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

等等,但是为什么parquet文件大小几乎是默认maxPartitionBytes值(128 MB)的两倍(230 MB)?当你说我的文件的最终大小取决于我使用的文件格式和压缩-所以我在读/写拼花-但我在每列中的对象都是大型嵌套结构-这就是你所说的文件格式影响最终大小的意思吗?(对不起,我是spark新手)等等,为什么拼花地板文件的大小几乎是默认maxPartitionBytes值(128MB)的两倍(230MB)?当你说我的文件的最终大小取决于我使用的文件格式和压缩-所以我在读/写拼花-但我在每列中的对象都是大型嵌套结构-这就是你所说的文件格式影响最终大小的意思吗?(对不起,我是spark的新手)