Filtrado de datos
Ahora que ya conoces un poco SQL, es más fácil hablar de las operaciones análogas utilizando Spark DataFrames.
Veamos el método .filter()
. Como puedes sospechar, ésta es la contrapartida Spark de la cláusula WHERE
de SQL. El método .filter()
toma como cadena una expresión que seguiría la cláusula WHERE
de una expresión SQL, o una columna Spark de valores booleanos (True
/False
).
Por ejemplo, las dos expresiones siguientes producirán el mismo resultado:
flights.filter("air_time > 120").show()
flights.filter(flights.air_time > 120).show()
Observa que en el primer caso, pasamos una cadena a .filter()
. En SQL, escribiríamos esta tarea de filtrado como SELECT * FROM flights WHERE air_time > 120
. .filter()
de Spark puede aceptar cualquier expresión que pudiera ir en la cláusula WHERE
de una consulta SQL (en este caso, "air_time > 120"
), siempre que se pase como una cadena.
Observa que, en este caso, no hacemos referencia al nombre de la tabla en la cadena, como no haríamos en la petición SQL.
En el segundo caso, en realidad pasamos una columna de valores booleanos a .filter()
. Recuerda que flights.air_time > 120
devuelve una columna de valores booleanos que tiene True
en lugar de los registros de flights.air_time
que sean mayores de 120, y False
en caso contrario.
Recuerda que ya tienes en tu espacio de trabajo un SparkSession
llamado spark
, junto con el Spark DataFrame flights
.
Este ejercicio forma parte del curso
Introducción a PySpark
Instrucciones del ejercicio
Utiliza el método
.filter()
para encontrar todos los vuelos que recorrieron más de 1000 millas en ambos sentidos:Primero, pasa una cadena SQL a
.filter()
que compruebe si la distancia es superior a 1000. Guárdala comolong_flights1
.A continuación, pasa una columna de valores booleanos a
.filter()
que compruebe lo mismo. Guárdala comolong_flights2
.
Utiliza
.show()
para imprimir las cabezas de ambos DataFrames y asegurarte de que son realmente iguales.
Ejercicio interactivo práctico
Prueba este ejercicio completando el código de muestra.
# Filter flights by passing a string
long_flights1 = ____.____("____ > ____")
# Filter flights by passing a column of boolean values
long_flights2 = ____.____(____.____ > ____)
# Print the data to check they're equal
____.____()
____.____()