1. Nauka
  2. /
  3. Kursy
  4. /
  5. Podstawy PySpark

Connected

ćwiczenie

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.

Instrukcje

100 XP
  • 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!