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 pysparkdesde 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 pysparkdesde 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 pysparkdesde 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:
- Muestre la columna 'Acres' real.
- Agregue 100 a la columna 'Acres'.
- Reste 100 de la columna 'Acres'.
- Multiplique 100 con la columna 'Acres'.
- Divida la columna 'Acres' por 100.
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:
- Encuentre los elementos total, promedio, conteo, mínimo y máximo de 'Acres'.
- Encuentre los elementos mínimo y máximo en la columna 'Soil_status'.
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().