Gle*_*olt 8 apache-spark spark-dataframe
我有一个DataFrame我需要根据特定的分区写入S3.代码如下所示:
dataframe
.write
.mode(SaveMode.Append)
.partitionBy("year", "month", "date", "country", "predicate")
.parquet(outputPath)
Run Code Online (Sandbox Code Playgroud)
将partitionBy数据拆分成相当多的文件夹(~400),每个文件夹只有一点点数据(~1GB).这就出现了问题 - 因为默认值为spark.sql.shuffle.partitions200,每个文件夹中的1GB数据被分成200个小的镶木地板文件,导致总共写入大约80000个镶木地板文件.由于多种原因,这不是最佳的,我想避免这种情况.
我当然可以设置spark.sql.shuffle.partitions一个更小的数字,比如说10,但据我所知,这个设置也控制了连接和聚合中shuffle的分区数,所以我真的不想改变它.
有谁知道是否有另一种方法来控制写入多少文件?
正如您所指出的那样,spark.sql.shuffle.partitions仅适用于SparkSQL中的shuffle和join.
partitionByin DataFrameWriter(从调用后一直移动DataFrame到)只需对前一个分区进行操作即可.(作者只会将列分配给将要写出的表/镶木地板文件,因此它与分区数无关.这有点令人困惑.)DataFrameWriterwritepartitionBy
长话短说,只是repartition在DataFrame你把它转换成一个作家了.
| 归档时间: |
|
| 查看次数: |
4886 次 |
| 最近记录: |