pysparkDataframe的多列重分区

aiazj4mn  于 2021-05-18  发布在  Spark
关注(0)|答案(1)|浏览(558)

编辑:在我再次阅读帖子后,为问题添加更多的上下文:
假设我有一个pysparkDataframe,我正在使用它,目前我可以重新划分Dataframe如下:

dataframe.repartition(200, col_name)

我把分区的Dataframe写到Parquet文件中。在读取目录时,我看到仓库中的目录按我想要的方式进行了分区:

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

uurv41yg

uurv41yg1#

重新划分
函数重分区将控制数据的内存分区。如果将重分区指定为200,那么在内存中将有200个分区。
文件系统上的物理分区
具有给定列列表控制目录结构的函数partitionby。将基于列名和列值创建物理分区。每个分区可以创建任意数量的文件,只要您有足够的数据写入,就会创建重新分区(默认值200)。
这是基于您的问题的示例。

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

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

相关问题