PySpark particiónBy() se usa para particionar en función de los valores de la columna mientras se escribe DataFrame en el disco/sistema de archivos. Cuando escribe DataFrame en el disco llamando a deploymentBy(), Pyspark divide los registros en función de la columna de partición y almacena los datos de cada partición en un subdirectorio.
PySpark Partition es una forma de dividir un gran conjunto de datos en conjuntos de datos más pequeños en función de una o más claves de partición. También puede crear una partición en varias columnas usando la partición por(), simplemente pase las columnas que desea particionar como un argumento para este método.
Syntax: partitionBy(self, *cols)
Vamos a crear un DataFrame leyendo un archivo CSV. Puede encontrar el conjunto de datos en este enlace Cricket_data_set_odi.csv
Crear marco de datos para la demostración:
Python3
# importing module import pyspark from pyspark.sql import SparkSession from pyspark.context import SparkContext # creating sparksession and giving an app name spark = SparkSession.builder.appName('sparkdf').getOrCreate() # create DataFrame df=spark.read.option( "header",True).csv("Cricket_data_set_odi.csv") # Display schema df.printSchema()
Producción:
Partición de PySparkBy() con una columna:
Del DataFrame anterior, usaremos Team como clave de partición para nuestros ejemplos a continuación:
Python3
df.write.option("header", True) \ .partitionBy("Team") \ .mode("overwrite") \ .csv("Team") # change directory cd Team # On our DataFrame, we have a total # of 9 different teams hence, # it creates 9 directories as shown below. # The name of the sub-directory would be # the partition column and its value # (partition column=value). ls
Producción:
Partición de PySparkBy() con varias columnas:
También puede crear particiones en varias columnas utilizando PySpark particiónBy(). Simplemente pase las columnas que desea particionar como argumentos para este método.
Del DataFrame anterior, estamos usando Team y Specialty como clave de partición para nuestros ejemplos a continuación.
Python3
# From above DataFrame, we will be using # Team and Speciality as a partition key # for our examples below. # partitionBy() df.write.option("header", True) \ .partitionBy("Team", "Speciality") \ .mode("overwrite") \ .csv("Team-Speciality") # change directory cd Team = Ind cd Team-Speciality cd Team = Ind ls
Producción:
Número de control de registros por archivo de partición:
Utilice la opción maxRecordsPerFile si desea controlar la cantidad de registros para cada partición. Esto es especialmente útil cuando sus datos están sesgados (algunas particiones con muy pocos registros y otras particiones con una gran cantidad de registros).
Python3
# partitionBy() control number of partitions df.write.option("header",True) \ .option("maxRecordsPerFile", 2) \ .partitionBy("Team") \ .mode("overwrite") \ .csv("Team") # change directory cd Team ls
Producción: