pyspark.sql.functions proporciona una función split() que se usa para dividir la columna de string DataFrame en varias columnas.
Sintaxis: pyspark.sql.functions.split(str, pattern, limit=- 1)
Parámetros:
- str: str es una columna o str para dividir.
- patrón: Es un parámetro str, una string que representa una expresión regular. Esta debería ser una expresión regular de Java.
- límite: Es un parámetro int. Opcional, un valor entero cuando se especifica controla el número de veces que se aplica el patrón.
- limit > 0: la longitud de la array resultante no debe ser mayor que el límite especificado.
- limit <= 0 : El patrón debe aplicarse tantas veces como sea posible o hasta el límite.
Primero vamos a crear un DataFrame.
Python3
# installing pyspark !pip install pyspark # importing pyspark import pyspark # importing SparkSession from pyspark.sql import SparkSession # importing all from pyspark.sql.function from pyspark.sql.functions import * # creating SparkSession object spark=SparkSession.builder.appName("sparkdf").getOrCreate() # creating the row data for dataframe data = [('Jaya', 'Sinha', 'F', '1991-04-01'), ('Milan', 'Sharma', '', '2000-05-19'), ('Rohit', 'Verma', 'M', '1978-09-05'), ('Maria', 'Anne', 'F', '1967-12-01'), ('Jay', 'Mehta', 'M', '1980-02-17') ] # giving the column names for the dataframe columns = ['First Name', 'Last Name', 'Gender', 'DOB'] # creating the dataframe df df = spark.createDataFrame(data, columns) # printing dataframe schema df.printSchema() # show dataframe df.show()
Producción:
Ejemplo 1: Dividir columna usando withColumn()
En este ejemplo, creamos un marco de datos simple con la columna ‘DOB’ que contiene la fecha de nacimiento en aaaa-mm-dd en formato de string. Usando split y withColumn() , la columna se dividirá en la columna de año, mes y fecha.
Python3
# split() function defining parameters split_cols = pyspark.sql.functions.split(df['DOB'], '-') # Now applying split() using withColumn() df1 = df.withColumn('Year', split_cols.getItem(0)) \ .withColumn('Month', split_cols.getItem(1)) \ .withColumn('Day', split_cols.getItem(2)) # show df df1.show()
Producción:
Alternativamente, también podemos escribir así, dará el mismo resultado:
Python3
# defining split() along with withColumn() df2 = df.withColumn('Year', split(df['DOB'], '-').getItem(0)) \ .withColumn('Month', split(df['DOB'], '-').getItem(1)) \ .withColumn('Day', split(df['DOB'], '-').getItem(2)) # show df2 df2.show()
Producción:
En el ejemplo anterior, hemos usado 2 parámetros de split(), es decir, ‘str’ que contiene el nombre de la columna y ‘patrón’ contiene el tipo de patrón de los datos presentes en esa columna y para dividir los datos desde esa posición.
Ejemplo 2: Dividir columna usando select()
En este ejemplo, usaremos el mismo DataFrame df y dividiremos su columna ‘DOB’ usando .select():
Python3
# creating the row data for dataframe data = [('Jaya', 'Sinha', 'F', '1991-04-01'), ('Milan', 'Sharma', '', '2000-05-19'), ('Rohit', 'Verma', 'M', '1978-09-05'), ('Maria', 'Anne', 'F', '1967-12-01'), ('Jay', 'Mehta', 'M', '1980-02-17') ] # giving the column names for the dataframe columns = ['First Name', 'Last Name', 'DOB'] # creating the dataframe df df = spark.createDataFrame(data, columns) # printing dataframe schema df.printSchema() # show dataframe df.show() # defining split () split_cols = pyspark.sql.functions.split(df['DOB'], '-') # applying split() using select() df3 = df.select('First Name', 'Last Name', 'Gender', 'DOB', split_cols.getItem(0).alias('year'), split_cols.getItem(1).alias('month'), split_cols.getItem(2).alias('day')) # show df3 df3.show()
Producción:
En el ejemplo anterior, no hemos seleccionado la columna ‘Género’ en select(), por lo que no está visible en el df3 resultante.
Ejemplo 3: Dividir otra columna de strings
Python3
# creating the row data for dataframe data = [('Jaya', 'Sinha'), ('Milan', 'Soni'), ('Rohit', 'Verma'), ('Maria', 'Anne'), ('Jay', 'Mehta')] # giving the column names for the dataframe columns = ['First Name', 'Last Name'] # creating the dataframe df df = spark.createDataFrame(data, columns) # printing dataframe schema df.printSchema() # show dataframe df.show() # defining split() split_cols = pyspark.sql.functions.split(df['Last Name'], '') # applying split() using .withColumn() df = df.withColumn('1', split_cols.getItem(0)) \ .withColumn('2', split_cols.getItem(1)) \ .withColumn('3', split_cols.getItem(2)) \ .withColumn('4', split_cols.getItem(3)) \ .withColumn('5', split_cols.getItem(4)) # show df df.show()
Producción:
En el ejemplo anterior, tomamos solo dos columnas, Nombre y Apellido, y dividimos los valores de la columna Apellido en caracteres individuales que residen en varias columnas.
Publicación traducida automáticamente
Artículo escrito por neelutiwari y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA