НачатьНачать бесплатно

Фильтрация данных

Теперь, когда у вас есть базовые знания 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
____.____()
____.____()
Редактировать и запускать код