Dataframe 限制spark.read pyspark的分区数

Dataframe 限制spark.read pyspark的分区数,dataframe,apache-spark,pyspark,Dataframe,Apache Spark,Pyspark,使用spark读取xml文件后: df = spark.read\ .format("xml")\ .options(**options)\ .load("s3a://.../.../") 我用df.rdd.getNumPartitions()检查了分区的数量,得到了20081 如何在开始时限制分区的数量,以便以后不必执行coalesce()?有这么多分区的问题是因为每个分区在df.write期间创建一个文

使用spark读取xml文件后:

df = spark.read\
        .format("xml")\
        .options(**options)\
        .load("s3a://.../.../")
我用
df.rdd.getNumPartitions()
检查了分区的数量,得到了20081


如何在开始时限制分区的数量,以便以后不必执行
coalesce()
?有这么多分区的问题是因为每个分区在
df.write期间创建一个文件,每次运行此进程时,s3中都会出现20081个新的非常小的文件,这是一种非常糟糕的做法。

spark.read的结果数据帧将始终与分区数和文件数匹配,因为每个文件都将由专用任务读取


如果您需要更频繁地运行此过程,我宁愿使用
coalesce
repartition
将原始20000个文件消耗并复制到较小的文件中。然后,对这些文件的所有后续读取将导致具有较小分区的数据帧。

分区数通过一个稍微复杂的公式计算。但是为了简化它,请尝试增加该值
spark.sql.files.maxPartitionBytes
,默认值为
134217728
(128 MB)。试着把它弄大一点,你就会看到区别

spark.conf.set('spark.sql.files.maxPartitionBytes','1073741824')#1 GB