¿Cómo verificar una substring en un marco de datos PySpark?

En este artículo, veremos cómo verificar una substring en el marco de datos de PySpark.

La substring es una secuencia continua de caracteres dentro de un tamaño de string más grande. Por ejemplo, «aprendiendo pyspark» es una substring de «Estoy aprendiendo pyspark de GeeksForGeeks». Veamos las diferentes formas en que podemos encontrar una substring de una o más columnas de un marco de datos de PySpark.

Creando Dataframe para demostración:

Python

# importing module
import pyspark
  
# importing sparksession from pyspark.sql module
from pyspark.sql import SparkSession
  
# creating sparksession and giving an app name
spark = SparkSession.builder.appName('sparkdf').getOrCreate()
  
  
# Column names for the dataframe
columns = ["LicenseNo", "ExpiryDate"]
  
# Row data for the dataframe
data = [
    ("MH201411094334", "2024-11-19"),
    ("AR202027563890", "2030-03-16"),
    ("UP202010345567", "2035-12-30"),
    ("KN201822347800", "2028-10-29"),
]
  
# Create the dataframe using the above values
reg_df = spark.createDataFrame(data=data,
                               schema=columns)
  
# View the dataframe
reg_df.show()

Producción:

En el marco de datos anterior, LicenseNo se compone de 3 información, código de estado de 2 letras + año de registro + número de registro de 8 dígitos.

Método 1: U sar DataFrame.withColumn()

El DataFrame.withColumn(colName, col) se puede usar para extraer una substring de los datos de la columna usando la función substring() de pyspark junto con ella.

Sintaxis: DataFrame.withColumn(colName, col) 

Parámetros:

  • colName: str, nombre de la nueva columna
  • col: str, una expresión de columna para la nueva columna

Devuelve un nuevo DataFrame agregando una columna o reemplazando la columna existente que tiene el mismo nombre.

Haremos uso de la función substring() de pyspark para crear una nueva columna «Estado» extrayendo la substring respectiva de la columna LicenseNo.

Sintaxis: pyspark.sql.functions.substring(str, pos, len)

Ejemplo 1: para columnas individuales como substring.

Python

from pyspark.sql.functions import substring
  
reg_df.withColumn(
  'State', substring('LicenseNo', 1, 2)
).show()

Producción:

Aquí, hemos creado una nueva columna «Estado» donde la substring se toma de la columna «LicenseNo». (1, 2) indica que debemos comenzar desde el primer carácter y extraer 2 caracteres de la columna «LicenseNo».

Ejemplo 2: para varias columnas como substring

Extracción del código de estado como ‘Estado’, Año de registro como ‘RegYear’, ID de registro como ‘RegID’, Año de vencimiento como ‘ExpYr’, Fecha de vencimiento como ‘ExpDt’, Mes de vencimiento como ‘ExpMo’.

Python

from pyspark.sql.functions import substring
  
reg_df \
.withColumn('State'  , substring('LicenseNo' , 1, 2)) \
.withColumn('RegYear', substring('LicenseNo' , 3, 4)) \
.withColumn('RegID'  , substring('LicenseNo' , 7, 8)) \
.withColumn('ExpYr'  , substring('ExpiryDate', 1, 4)) \
.withColumn('ExpMo'  , substring('ExpiryDate', 6, 2)) \
.withColumn('ExpDt'  , substring('ExpiryDate', 9, 2)) \
.show()

Producción:

El código anterior demuestra cómo el método withColumn() se puede usar varias veces para obtener varias columnas de substrings. Cada método withColumn() agrega una nueva columna en el marco de datos. Vale la pena señalar que también conserva las columnas originales.

Método 2: usar substr en lugar de substring

Alternativamente, también podemos usar substr del tipo de columna en lugar de usar substring.

Sintaxis: pyspark.sql.Column.substr(startPos, longitud)

Devuelve una columna que es una substring de la columna que comienza en ‘startPos’ en byte y tiene una longitud de ‘longitud’ cuando ‘str’ es de tipo binario.

Ejemplo: uso de substr 

Python

from pyspark.sql.functions import col
  
reg_df \
.withColumn('State'  , col('LicenseNo' ).substr(1, 2)) \
.withColumn('RegYear', col('LicenseNo' ).substr(3, 4)) \
.withColumn('RegID'  , col('LicenseNo' ).substr(7, 8)) \
.withColumn('ExpYr'  , col('ExpiryDate').substr(1, 4)) \
.withColumn('ExpMo'  , col('ExpiryDate').substr(6, 2)) \
.withColumn('ExpDt'  , col('ExpiryDate').substr(9, 2)) \
.show()

Producción:

El método substr() funciona junto con la función col del módulo spark.sql . Sin embargo, más o menos es solo un cambio sintáctico y la lógica de posicionamiento sigue siendo la misma. 

Método 3: Usando DataFrame.select()

Aquí usaremos la función select() para crear substrings en el marco de datos.

Sintaxis: pyspark.sql.DataFrame.select(*columnas)

Ejemplo: Uso de DataFrame.select()

Python

from pyspark.sql.functions import substring
  
reg_df.select(
  substring('LicenseNo' , 1, 2).alias('State')  ,
  substring('LicenseNo' , 3, 4).alias('RegYear'),
  substring('LicenseNo' , 7, 8).alias('RegID')  ,
  substring('ExpiryDate', 1, 4).alias('ExpYr')  ,
  substring('ExpiryDate', 6, 2).alias('ExpMo')  ,
  substring('ExpiryDate', 9, 2).alias('ExpDt')  ,
).show()

Producción:

Método 4: Usar ‘spark.sql()’

El método spark.sql() ayuda a ejecutar consultas SQL relacionales dentro de Spark. Permite la ejecución de consultas relacionales, incluidas las expresadas en SQL utilizando Spark.  

Sintaxis: spark.sql(expresión)

Ejemplo: Usar ‘spark.sql()’

Python

reg_df.createOrReplaceTempView("reg_view")
  
reg_df2 = spark.sql('''
SELECT 
  SUBSTR(LicenseNo, 1, 3)  AS State,
  SUBSTR(LicenseNo, 3, 4)  AS RegYear,
  SUBSTR(LicenseNo, 7, 8)  AS RegID,
  SUBSTR(ExpiryDate, 1, 4) AS ExpYr,
  SUBSTR(ExpiryDate, 6, 2) AS ExpMo,
  SUBSTR(ExpiryDate, 9, 2) AS ExpDt
FROM reg_view;
''')
  
reg_df2.show()

Producción:

Aquí, podemos ver que la expresión utilizada dentro de spark.sql() es una consulta SQL relacional. También podemos usar lo mismo en un editor de consultas SQL para obtener la salida respectiva.

Método 5: Usar spark.DataFrame.selectExpr()

Usar el método selectExpr() es una forma de proporcionar consultas SQL, pero es diferente de las relacionales. Podemos proporcionar una o más expresiones SQL dentro del método. Toma una o más expresiones SQL en una string y devuelve un nuevo marco de datos

Sintaxis: selectExpr(exprs)

Ejemplo: uso de spark.DataFrame.selectExpr().

Python

from pyspark.sql.functions import substring
  
reg_df.selectExpr(
  'LicenseNo',
  'ExpiryDate',
  'substring(LicenseNo , 1, 2) AS State'   ,
  'substring(LicenseNo , 3, 4) AS RegYear' ,
  'substring(LicenseNo , 7, 8) AS RegID'   ,
  'substring(ExpiryDate, 1, 4) AS ExpYr'   ,
  'substring(ExpiryDate, 6, 2) AS ExpMo'   ,
  'substring(ExpiryDate, 9, 2) AS ExpDt'   ,
).show()

Producción:

En el fragmento de código anterior, podemos observar que hemos proporcionado múltiples expresiones SQL dentro del método selectExpr() . Cada una de estas expresiones se parece a una parte de la consulta SQL relacional que escribimos. También preservamos las columnas originales al mencionarlas explícitamente.

Publicación traducida automáticamente

Artículo escrito por apathak092 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 *