PySpark SelectExpr()

Pyspark Selectexpr



Usando la función selectExpr() en PySpark, podemos evaluar directamente una expresión sin crear ninguna TABLA o VISTA. Esta función está disponible en el módulo pyspark.sql.DataFrame, que es similar al método select(). Con selectExpr(), podemos mostrar las columnas, aplicar las funciones en las columnas, evaluar las expresiones, realizar operaciones de agregación, etc. También es posible evaluar/especificar varias columnas a la vez.

Pyspark.sql.DataFrame.selectExpr()

La función selectexpr() toma las columnas/conjunto de expresiones y devuelve el DataFrame basado en las expresiones/columnas especificadas. Se pueden especificar múltiples expresiones en esta función que está separada por comas. Para mostrar el DataFrame, podemos usar las funciones show()/collect().

Sintaxis:







pyspark_DataFrame_object.selectExpr(“Columnas”/”Expresiones”)

Aquí, el pyspark_DataFrame_object es el PySpark DataFrame de entrada.



Escenario 1: seleccione las columnas

En este escenario, veremos cómo seleccionar las columnas particulares del PySpark DataFrame usando la función selectExpr().



La expresión que se utiliza es “columna_existente como nombre_nuevo”. Aquí, la columna existente es el nombre de la columna que está presente en el marco de datos y se muestra como nombre nuevo (aliasing).





Ejemplo:

Cree un marco de datos PySpark llamado 'agri_df' con 5 filas y columnas. Obtenga las columnas 'Soil_status' y 'Soil_Type' como 'STATUS' y 'TYPE'.

importar pyspark

desde pyspark.sql importar SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Sugerencia de Linux' ).getOrCreate()

# datos agrícolas con 5 filas y 5 columnas

agrícola =[{ 'Tipo de suelo' : 'Negro' , 'Irrigation_availability' : 'No' , 'Hectáreas' : 2500 , 'Soil_status' : 'Seco' ,
'País' : 'EE.UU' },

{ 'Tipo de suelo' : 'Negro' , 'Irrigation_availability' : 'Sí' , 'Hectáreas' : 3500 , 'Soil_status' : 'Húmedo' ,
'País' : 'India' },

{ 'Tipo de suelo' : Ninguno , 'Irrigation_availability' : 'Sí' , 'Hectáreas' : 210 , 'Soil_status' : 'Seco' ,
'País' : 'REINO UNIDO' },

{ 'Tipo de suelo' : 'Otro' , 'Irrigation_availability' : 'No' , 'Hectáreas' : 1000 , 'Soil_status' : 'Húmedo' ,
'País' : 'EE.UU' },

{ 'Tipo de suelo' : 'Arena' , 'Irrigation_availability' : 'No' , 'Hectáreas' : 500 , 'Soil_status' : 'Seco' ,
'País' : 'India' }]

 

# crear el marco de datos a partir de los datos anteriores

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Obtener Soil_status y Soil_Type como 'ESTADO' y 'TIPO'.

agri_df.selectExpr( 'Soil_status como ESTADO' , 'Soil_Type como TIPO' ).espectáculo()

Producción:



Escenario 2: Especificación de las expresiones condicionales

En este escenario, veremos cómo evaluar las condiciones dentro de la función selectExpr().

La expresión que se utiliza es “valor del operador columna_existente”. Aquí, la columna existente es el nombre de la columna que está presente en el marco de datos y comparamos cada valor en esta columna con la cadena/valor.

Ejemplo 1:

Compruebe si el país es 'EE.UU.' o no. Aquí se utiliza el operador igual a (=).

importar pyspark

desde pyspark.sql importar SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Sugerencia de Linux' ).getOrCreate()

# datos agrícolas con 5 filas y 5 columnas

agrícola =[{ 'Tipo de suelo' : 'Negro' , 'Irrigation_availability' : 'No' , 'Hectáreas' : 2500 , 'Soil_status' : 'Seco' ,
'País' : 'EE.UU' },

{ 'Tipo de suelo' : 'Negro' , 'Irrigation_availability' : 'Sí' , 'Hectáreas' : 3500 , 'Soil_status' : 'Húmedo' ,
'País' : 'India' },

{ 'Tipo de suelo' : Ninguno , 'Irrigation_availability' : 'Sí' , 'Hectáreas' : 210 , 'Soil_status' : 'Seco' ,
'País' : 'REINO UNIDO' },

{ 'Tipo de suelo' : 'Otro' , 'Irrigation_availability' : 'No' , 'Hectáreas' : 1000 , 'Soil_status' : 'Húmedo' ,
'País' : 'EE.UU' },

{ 'Tipo de suelo' : 'Arena' , 'Irrigation_availability' : 'No' , 'Hectáreas' : 500 , 'Soil_status' : 'Seco' ,
'País' : 'India' }]

 

# crear el marco de datos a partir de los datos anteriores

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Compruebe si el país es 'EE. UU.' o no.

agri_df.selectExpr( 'País = 'EE. UU.'' ).espectáculo()

Producción:

Ejemplo 2:

Compruebe si Soil_Type es NULL o no. La palabra clave NULL comprueba si el valor es NULL o no. Si es nulo, se devuelve verdadero. De lo contrario, se devuelve falso. La expresión final es 'Soil_Type IS NULL'

importar pyspark

desde pyspark.sql importar SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Sugerencia de Linux' ).getOrCreate()

# datos agrícolas con 5 filas y 5 columnas

agrícola =[{ 'Tipo de suelo' : 'Negro' , 'Irrigation_availability' : 'No' , 'Hectáreas' : 2500 , 'Soil_status' : 'Seco' ,
'País' : 'EE.UU' },

{ 'Tipo de suelo' : 'Negro' , 'Irrigation_availability' : 'Sí' , 'Hectáreas' : 3500 , 'Soil_status' : 'Húmedo' ,
'País' : 'India' },

{ 'Tipo de suelo' : Ninguno , 'Irrigation_availability' : 'Sí' , 'Hectáreas' : 210 , 'Soil_status' : 'Seco' ,
'País' : 'REINO UNIDO' },

{ 'Tipo de suelo' : 'Otro' , 'Irrigation_availability' : 'No' , 'Hectáreas' : 1000 , 'Soil_status' : 'Húmedo' ,
'País' : 'EE.UU' },

{ 'Tipo de suelo' : 'Arena' , 'Irrigation_availability' : 'No' , 'Hectáreas' : 500 , 'Soil_status' : 'Seco' ,
'País' : 'India' }]

 

# crear el marco de datos a partir de los datos anteriores

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Comprobar si Soil_Type es NULL o no.

agri_df.selectExpr( 'Soil_Type ES NULO' ).espectáculo()

Producción:

Escenario 3: Evaluación de las expresiones

En este escenario, veremos cómo especificar las expresiones matemáticas. La expresión que se utiliza es 'existing_column math_expression'.

Ejemplo:

  1. Muestre la columna 'Acres' real.
  2. Agregue 100 a la columna 'Acres'.
  3. Reste 100 de la columna 'Acres'.
  4. Multiplique 100 con la columna 'Acres'.
  5. Divida la columna 'Acres' por 100.
importar pyspark

desde pyspark.sql importar SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Sugerencia de Linux' ).getOrCreate()

# datos agrícolas con 5 filas y 5 columnas

agrícola =[{ 'Tipo de suelo' : 'Negro' , 'Irrigation_availability' : 'No' , 'Hectáreas' : 2500 , 'Soil_status' : 'Seco' ,
'País' : 'EE.UU' },

{ 'Tipo de suelo' : 'Negro' , 'Irrigation_availability' : 'Sí' , 'Hectáreas' : 3500 , 'Soil_status' : 'Húmedo' ,
'País' : 'India' },

{ 'Tipo de suelo' : Ninguno , 'Irrigation_availability' : 'Sí' , 'Hectáreas' : 210 , 'Soil_status' : 'Seco' ,
'País' : 'REINO UNIDO' },

{ 'Tipo de suelo' : 'Otro' , 'Irrigation_availability' : 'No' , 'Hectáreas' : 1000 , 'Soil_status' : 'Húmedo' ,
'País' : 'EE.UU' },

{ 'Tipo de suelo' : 'Arena' , 'Irrigation_availability' : 'No' , 'Hectáreas' : 500 , 'Soil_status' : 'Seco' ,
'País' : 'India' }]

 

# crear el marco de datos a partir de los datos anteriores

agri_df = linuxhint_spark_app.createDataFrame(agri)

# Escribe 4 expresiones para restar, sumar, dividir y multiplicar la columna Acres.

agri_df.selectExpr( 'Hectáreas' , 'Acres - 100' , 'Acres * 100' , 'Acres + 100' , 'Acres / 100' ).espectáculo()

Producción:

Escenario 4: Aplicación de las funciones agregadas

SUMA(nombre_columna) – Evalúa el valor total en la columna especificada.

MEDIA(nombre_columna) – Evalúa el valor promedio en la columna especificada.

MIN(nombre_columna) – Devuelve el elemento mínimo entre todos los elementos de la columna especificada.

MAX(nombre_columna) – Devuelve el elemento máximo entre todos los elementos de la columna especificada.

Ejemplo:

  1. Encuentre los elementos total, promedio, conteo, mínimo y máximo de 'Acres'.
  2. Encuentre los elementos mínimo y máximo en la columna 'Soil_status'.
importar pyspark

desde pyspark.sql importar SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Sugerencia de Linux' ).getOrCreate()

# datos agrícolas con 5 filas y 5 columnas

agrícola =[{ 'Tipo de suelo' : 'Negro' , 'Irrigation_availability' : 'No' , 'Hectáreas' : 2500 , 'Soil_status' : 'Seco' ,
'País' : 'EE.UU' },

{ 'Tipo de suelo' : 'Negro' , 'Irrigation_availability' : 'Sí' , 'Hectáreas' : 3500 , 'Soil_status' : 'Húmedo' ,
'País' : 'India' },

{ 'Tipo de suelo' : Ninguno , 'Irrigation_availability' : 'Sí' , 'Hectáreas' : 210 , 'Soil_status' : 'Seco' ,
'País' : 'REINO UNIDO' },

{ 'Tipo de suelo' : 'Otro' , 'Irrigation_availability' : 'No' , 'Hectáreas' : 1000 , 'Soil_status' : 'Húmedo' ,
'País' : 'EE.UU' },

{ 'Tipo de suelo' : 'Arena' , 'Irrigation_availability' : 'No' , 'Hectáreas' : 500 , 'Soil_status' : 'Seco' ,
'País' : 'India' }]

 

# crear el marco de datos a partir de los datos anteriores

agri_df = linuxhint_spark_app.createDataFrame(agri)

# operaciones agregadas

agri_df.selectExpr( 'SUM(Acres)' , 'MEDIA(Acres)' , 'CONTAR(Acres)' , 'PROMEDIO (Acres)' , 'MIN(Acres)' ,
  'MAX(Acres)' ).espectáculo()

agri_df.selectExpr( 'MIN(Suelo_estado)' , 'MAX(Soil_status)' ).espectáculo()

Producción:

Conclusión

Discutimos sobre la función selectExpr() que toma las columnas/conjuntos de expresiones y devuelve el DataFrame basado en las expresiones/columnas especificadas. Como parte de esto, aprendimos los cuatro escenarios principales en los que se aplica selectExpr(). En esta función se pueden especificar varias expresiones separadas por comas. No es necesario crear una VISTA TEMPORAL para usar la función selectExpr().