Dataframe 限制spark.read pyspark的分区数
使用spark读取xml文件后: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期间创建一个文
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