Divida una sola columna en varias columnas en PySpark DataFrame

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:

Marco de datos creado

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:

Marco de datos después de dividir columnas

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *