Funciones like() e ilike() en PySpark
PySpark es una biblioteca de Apache Spark que permite procesamiento de datos en paralelo y distribuido. Las funciones like() e ilike() son muy útiles para filtrar y seleccionar datos de un DataFrame en PySpark. En este artículo, aprenderemos cómo utilizar estas funciones en PySpark para encontrar coincidencias en los datos de manera eficiente.
- Usando la función like() en PySpark
- Usando la función ilike() en PySpark
- Usando la función like() e ilike() juntos
- Ejemplo de uso
- Conclusión
-
Preguntas frecuentes
- ¿Puedo buscar varias cadenas de caracteres al mismo tiempo utilizando la función like() en PySpark?
- ¿La función ilike() busca cadenas de caracteres que no coinciden exactamente con el criterio de búsqueda?
- ¿Cómo puedo buscar la ocurrencia de una cadena de caracteres exacta utilizando la función like() en PySpark?
- ¿La función not() puede utilizarse con la función like() en PySpark?
Usando la función like() en PySpark
La función like() se utiliza en PySpark para buscar cadenas de caracteres en un DataFrame. La sintaxis básica de la función like() es la siguiente:
df.filter(df.column_name.like("%cadena_de_caracteres%"))
La cadena de caracteres que deseamos buscar debe estar enrecomendado en el formato '%cadena_de_caracteres%'. Los símbolos de porcentaje (%) que rodean la cadena de caracteres indican que la cadena de caracteres puede estar en cualquier parte del campo de texto (antes o después).
Probemos esto en un ejemplo. Supongamos que tenemos un DataFrame con nombres de frutas y queremos filtrar solo aquellos que contienen la palabra "manzana". Aquí está el código para hacerlo:
fruits_df = spark.createDataFrame([("apple", 1), ("banana", 2), ("cherry", 3), ("grape", 4)], ["fruit_name", "id"])
fruit_names_like = fruits_df.filter(fruits_df.fruit_name.like("%manzana%"))
fruit_names_like.show()
Usando la función ilike() en PySpark
La función ilike() es similar a la función like(), con la única diferencia de que es insensible a mayúsculas y minúsculas. La sintaxis básica de la función ilike() es la siguiente:
df.filter(df.column_name.ilike("%cadena_de_caracteres%"))
Probemos esto en un ejemplo. Vamos a utilizar el mismo DataFrame de frutas y buscar todas las ocurrencias de la cadena "a". Esta vez, usaremos la función ilike() para hacer que la búsqueda sea insensible a mayúsculas y minúsculas:
fruit_names_ilike = fruits_df.filter(fruits_df.fruit_name.ilike("%a%"))
fruit_names_ilike.show()
Usando la función like() e ilike() juntos
Cuando tenemos grandes conjuntos de datos y queremos filtrar por varias cadenas de caracteres al mismo tiempo, podemos utilizar una combinación de las funciones like() e ilike() junto con la función or() para buscar más de una cadena de caracteres.
La función or() nos permite buscar la manifestación de varios casos. Para ello, aplicaremos una condición para cada caso que deseamos buscar y uniremos cada condición con la función or(). En este ejemplo, vamos a buscar los nombres de frutas que contengan la palabra "manzana", "papaya" o una de estas dos palabras, pero que no contengan la palabra "banana".
fruit_names = fruits_df.filter((fruits_df.fruit_name.like("%manzana%")) | (fruits_df.fruit_name.like("%papaya%")) | ((fruits_df.fruit_name.ilike("%manzana%")) & ~(fruits_df.fruit_name.like("%banana%"))))
fruit_names.show()
Debemos tener en cuenta que cuando utilizamos la función not (~), se debe usar en conjunto con su componente dentro del paréntesis para hacer una negación de la igualdad entre columnas.
Ejemplo de uso
Imaginemos que tenemos un archivo csv llamado "datos.csv" que contiene información de registros de ventas y quisieramos leer el archivo y buscar únicamente las filas de las ventas realizadas en el mes de "enero" en la ciudad de "Guadalajara", y además nos interesa saber el total de ventas que se realizaron en esa ciudad en ese mes.
Primero, deberíamos leer el archivo csv y transformarlo en un DataFrame. Luego, utilizaremos la función filter() en conjunto con las funciones like() e ilike() para buscar la información que nos interesa. Por último, utilizaremos la función agg() para calcular la suma total de las ventas en la ciudad de Guadalajara durante el mes de enero.
from pyspark.sql.functions import sum
# Leer el archivo csv y crear un DataFrame
ventas_df = spark.read.csv("datos.csv", header=True, inferSchema=True)
# Filtrar por ventas realizadas en Guadalajara en enero
ventas_gdl_enero = ventas_df.filter((ventas_df.ciudad.like("%guadalajara%")) & (ventas_df.fecha.like("%enero%")))
# Calcular el total de ventas en Guadalajara en enero
total_ventas_gdl_enero = ventas_gdl_enero.agg(sum("ventas"))
# Mostrar los resultados
ventas_gdl_enero.show()
total_ventas_gdl_enero.show()
Conclusión
Las funciones like() e ilike() son muy útiles para filtrar y seleccionar datos de un DataFrame en PySpark. Saber cómo utilizar estas funciones nos permite hacer búsquedas eficientes y precisas en grandes conjuntos de datos.
Preguntas frecuentes
¿Puedo buscar varias cadenas de caracteres al mismo tiempo utilizando la función like() en PySpark?
Sí, puedes utilizar la función or() para buscar varias cadenas de caracteres al mismo tiempo utilizando la función like() en PySpark.
¿La función ilike() busca cadenas de caracteres que no coinciden exactamente con el criterio de búsqueda?
Sí, la función ilike() busca cadenas de caracteres que no coinciden exactamente con el criterio de búsqueda, ya que es insensible a mayúsculas y minúsculas.
¿Cómo puedo buscar la ocurrencia de una cadena de caracteres exacta utilizando la función like() en PySpark?
Para buscar la ocurrencia de una cadena de caracteres exacta utilizando la función like() en PySpark, la cadena debe estar rodeada por símbolos de porcentaje (%). Por ejemplo, para buscar la ocurrencia de la cadena de caracteres "manzana" en un DataFrame, debes utilizar la siguiente sintaxis: df.filter(df.column_name.like("%manzana%")).
¿La función not() puede utilizarse con la función like() en PySpark?
Sí, puedes utilizar la función not() con la función like() en PySpark para hacer una negación de la igualdad entre columnas. Para ello, debes usar la siguiente sintaxis: ~(df.column_name.like("%cadena_de_caracteres%")).
Deja una respuesta