Фільтрування даних
Тепер, коли у вас є базові знання SQL, легше говорити про аналогічні операції з датафреймами Spark.
Розгляньмо метод .filter(). Як і можна здогадатися, це відповідник оператора WHERE у SQL. Метод .filter() приймає або вираз, який ішов би після WHERE у SQL, як рядок, або стовпчик Spark із булевими значеннями (True/False).
Наприклад, обидва наведені нижче вирази дадуть однаковий результат:
flights.filter("air_time > 120").show()
flights.filter(flights.air_time > 120).show()
Зверніть увагу: у першому випадку ми передаємо до .filter() рядок. У SQL ми записали б це як SELECT * FROM flights WHERE air_time > 120. Метод .filter() у Spark може приймати будь-який вираз, який може стояти в частині WHERE SQL-запиту (у цьому випадку "air_time > 120"), якщо його передано як рядок.
Зауважте, що в цьому рядку ми не згадуємо назву таблиці — як і не робили б цього в SQL-запиті.
У другому випадку ми передаємо до .filter() саме стовпчик булевих значень. Пам'ятайте, що flights.air_time > 120 повертає стовпчик булевих значень, де True стоїть для тих записів у flights.air_time, що перевищують 120, і False — інакше.
Пам'ятайте: у вашому робочому середовищі вже є SparkSession під назвою spark, а також датафрейм Spark flights.
Ця вправа є частиною курсу
Основи PySpark
Інструкції до вправи
- Скористайтеся методом
.filter(), щоб двома способами знайти всі перельоти на відстань понад 1000 миль:- Спочатку передайте до
.filter()SQL-рядок, який перевіряє, що відстань більша за 1000. Збережіть результат уlong_flights1. - Потім передайте до
.filter()стовпчик булевих значень, який перевіряє те саме. Збережіть результат уlong_flights2.
- Спочатку передайте до
- Використайте
.show(), щоб вивести верхні рядки обох датафреймів і переконатися, що вони справді однакові!
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
# 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
____.____()
____.____()