Фильтрация данных
Теперь, когда у вас есть базовые знания SQL, проще перейти к аналогичным операциям с Spark DataFrame.
Рассмотрим метод .filter(). Как можно догадаться, это аналог SQL-конструкции WHERE в Spark. Метод .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 и DataFrame flights.
Это упражнение является частью курса
Основы PySpark
Инструкции к упражнению
- Используйте метод
.filter(), чтобы найти все рейсы протяжённостью более 1000 миль двумя способами:- Сначала передайте в
.filter()SQL-строку, которая проверяет, превышает ли расстояние 1000. Сохраните результат в переменнуюlong_flights1. - Затем передайте в
.filter()столбец булевых значений, выполняющий ту же проверку. Сохраните результат в переменнуюlong_flights2.
- Сначала передайте в
- Используйте
.show(), чтобы вывести первые строки обоих DataFrame и убедиться, что они совпадают!
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# 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
____.____()
____.____()