Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pyspark dataframe的多列重新分区_Python_Apache Spark_Pyspark - Fatal编程技术网

Python Pyspark dataframe的多列重新分区

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 我想了解如何在多个层中重新

编辑:现在我重新阅读了这篇文章,为问题添加了更多的上下文:

假设我有一个正在使用的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()写出每个分区的最大文件数吗?

重新分区

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

文件系统上的物理分区

具有给定列列表控制目录结构的函数partitionBy。将基于列名和列值创建物理分区。如果您有足够的数据写入,每个分区可以创建在重新分区(默认值200)中指定的任意数量的文件

这是基于您的问题的示例

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

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

是的,partitionBy将根据给定的顺序创建相关的目录结构。@RamdevSharma我是否可以指定每个分区可以写入的最大文件数,如写入数据帧时。重新分区(numPartitions,Col)?使用“重新分区”和“分区方式”,您可以控制要在文件系统的每个物理分区中写入多少个文件。您可以就此提供建议吗