编辑:在我再次阅读帖子后,为问题添加更多的上下文:
假设我有一个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()写出每个分区的最大文件数吗?
1条答案
按热度按时间uurv41yg1#
重新划分
函数重分区将控制数据的内存分区。如果将重分区指定为200,那么在内存中将有200个分区。
文件系统上的物理分区
具有给定列列表控制目录结构的函数partitionby。将基于列名和列值创建物理分区。每个分区可以创建任意数量的文件,只要您有足够的数据写入,就会创建重新分区(默认值200)。
这是基于您的问题的示例。
它将在每个分区中提供200个文件,并根据给定的顺序创建分区。