Python Pyspark dataframe的多列重新分区
编辑:现在我重新阅读了这篇文章,为问题添加了更多的上下文: 假设我有一个正在使用的pyspark数据帧,目前我可以将该数据帧重新分区为:Python Pyspark dataframe的多列重新分区,python,apache-spark,pyspark,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 我想了解如何在多个层中重新
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()写出每个分区的最大文件数吗?重新分区 函数重新分区将控制数据的内存分区。如果将重新分区指定为200,那么内存中将有200个分区 文件系统上的物理分区 具有给定列列表控制目录结构的函数partitionBy。将基于列名和列值创建物理分区。如果您有足够的数据写入,每个分区可以创建在重新分区(默认值200)中指定的任意数量的文件 这是基于您的问题的示例
dataframe.
repartition(200).
write.mode("overwrite").
partitionBy("col_name1","col_name2","col_name3")
它将在每个分区中提供200个文件,并将根据给定的顺序创建分区。是的,partitionBy将根据给定的顺序创建相关的目录结构。@RamdevSharma我是否可以指定每个分区可以写入的最大文件数,如写入数据帧时。重新分区(numPartitions,Col)?使用“重新分区”和“分区方式”,您可以控制要在文件系统的每个物理分区中写入多少个文件。您可以就此提供建议吗