ПочатиПочніть безкоштовно

Фільтрування даних

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