Zacznij terazZacznij za darmo

Filtrowanie danych

Skoro masz już trochę doświadczenia z SQL, łatwiej będzie omówić analogiczne operacje na Spark DataFrames.

Przyjrzyjmy się metodzie .filter(). Jak możesz się domyślić, to odpowiednik klauzuli WHERE w SQL. Metoda .filter() przyjmuje albo wyrażenie w postaci łańcucha znaków – takie, które mogłoby wystąpić po WHERE w zapytaniu SQL – albo kolumnę Sparka zawierającą wartości logiczne (True/False).

Na przykład poniższe dwa wyrażenia dają ten sam wynik:

flights.filter("air_time > 120").show()
flights.filter(flights.air_time > 120).show()

Zwróć uwagę, że w pierwszym przypadku do .filter() przekazujemy łańcuch znaków. W SQL odpowiednie zapytanie wyglądałoby tak: SELECT * FROM flights WHERE air_time > 120. Metoda .filter() w Sparku akceptuje każde wyrażenie, które mogłoby znaleźć się w klauzuli WHERE zapytania SQL (tutaj: "air_time > 120"), o ile jest przekazane jako łańcuch znaków. Zwróć uwagę, że w tym przypadku nie podajemy nazwy tabeli w łańcuchu znaków – tak jak nie podawalibyśmy jej w samym zapytaniu SQL.

W drugim przypadku do .filter() przekazujemy kolumnę wartości logicznych. Pamiętaj, że flights.air_time > 120 zwraca kolumnę wartości logicznych: True dla rekordów w flights.air_time większych niż 120, a False dla pozostałych.

Pamiętaj, że w przestrzeni roboczej masz już dostępny obiekt SparkSession o nazwie spark oraz Spark DataFrame flights.

To ćwiczenie jest częścią kursu

Podstawy PySpark

Zobacz kurs

Instrukcje do ćwiczenia

  • Użyj metody .filter(), aby znaleźć wszystkie loty o dystansie powyżej 1000 mil – na dwa sposoby:
    • Najpierw przekaż do .filter() łańcuch znaków w formacie SQL, który sprawdza, czy dystans jest większy niż 1000. Zapisz wynik jako long_flights1.
    • Następnie przekaż do .filter() kolumnę wartości logicznych sprawdzającą to samo. Zapisz wynik jako long_flights2.
  • Użyj .show(), aby wyświetlić pierwsze wiersze obu DataFrames i sprawdź, czy rzeczywiście zawierają te same dane!

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

# 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
____.____()
____.____()
Edytuj i uruchom kod