通过Pyspark数据帧的多列重新分区

时间:2020-11-03 19:25:03

标签: python apache-spark pyspark

编辑:现在,我再次重读该帖子,为问题添加了更多上下文:

假设我有一个正在使用的pyspark数据框,目前我可以像这样重新分区该数据框:

dataframe.repartition(200, col_name)

然后我将分区的数据帧写到一个实木复合地板文件中。读取目录时,我看到仓库中的目录已按照我想要的方式进行了分区:

/apps/hive/warehouse/db/DATE/col_name=1
/apps/hive/warehouse/db/DATE/col_name=2

我想了解如何将其重新划分为多层,这意味着我将一列划分为顶级分区,将第二列划分为第二级分区,将第三列划分为第三级分区。像将partitionBy()添加到write方法一样简单吗?

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()来为每个分区写出最大数量的文件吗?

1 个答案:

答案 0 :(得分:1)

分区

函数重新分区将控制数据的内存分区。如果将重分区指定为200,则在内存中将有200个分区。

文件系统上的物理分区

功能partitionBy通过给定的列来列出控制目录结构。将基于列名和列值创建物理分区。如果您有足够的数据要写入,则每个分区可以创建与重新分区中指定的一样多的文件(默认为200)。

这是基于您的问题的示例示例。

dataframe.
repartition(200).
write.mode("overwrite").
partitionBy("col_name1","col_name2","col_name3")

它将在每个分区中提供200个文件,并将根据给定的顺序创建分区。

相关问题