【发布时间】:2021-02-16 12:16:42
【问题描述】:
编辑:在我再次重读帖子后,为问题添加更多上下文:
假设我有一个正在使用的 pyspark 数据框,目前我可以这样重新分区数据框:
dataframe.repartition(200, col_name)
然后我将分区数据帧写入镶木地板文件。读取目录的时候看到仓库中的目录按照我想要的方式分区了:
/apps/hive/warehouse/db/DATE/col_name=1
/apps/hive/warehouse/db/DATE/col_name=2
我想了解如何在多个层中对其进行重新分区,这意味着我将一列分区为顶级分区,将第二列分区为第二级分区,将第三列分区为第三级分区。是不是像在 write 方法中添加 partitionBy() 一样简单?
dataframe.mode("overwrite").partitionBy("col_name1","col_name2","col_name3")
这样创建目录?
/apps/hive/warehouse/db/DATE/col_name1=1
|--------------------------------------->/col_name2=1
|--------------------------------------------------->/col_name3=1
如果是这样,我可以使用 partitionBy() 来写出每个分区的最大文件数吗?
【问题讨论】:
-
是的,partitionBy 将根据给定的顺序创建相关的目录结构。
-
@RamdevSharma 我可以像写 dataframe.repartition(numPartitions, Col) 一样指定每个分区可以写入的最大文件数吗?
-
通过repartition和partitionBy,可以控制文件系统每个物理分区要写入多少文件
标签: python apache-spark pyspark