W dzisiejszej lekcji zanurzymy się w świat Spark DataFrames i SparkSQL, które pozwalają na efektywną pracę z ustrukturyzowanymi danymi w Sparku. Nauczymy się tworzyć, manipulować i analizować dane w formacie DataFrame, a także wykorzystywać język SQL do wykonywania zapytań.
Spark DataFrame to ustrukturyzowany zbiór danych zorganizowany w kolumny i wiersze, podobny do tabeli w bazie danych lub arkusza kalkulacyjnego. Dzięki DataFrame praca z danymi w Sparku staje się bardziej intuicyjna i wydajna. Są one zbudowane nad RDD (Resilient Distributed Datasets), co pozwala na optymalizację i wydajność przetwarzania danych. Zaleta: łatwiejsza manipulacja danych i integracja z SparkSQL. Pomyśl o tym jak o tabeli w Excelu, ale o wiele bardziej skalowalnej!
DataFrame możemy utworzyć na kilka sposobów. Najpopularniejszym jest konwersja z RDD lub wczytanie danych z pliku CSV.
Z RDD:
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("DataFrameCreation").getOrCreate()
rdd = spark.sparkContext.parallelize([("Anna", 30), ("Jan", 25), ("Ewa", 35)])
df = spark.createDataFrame(rdd, ["Imię", "Wiek"])
df.show()
Z pliku CSV:
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("CSVReader").getOrCreate()
df = spark.read.csv("dane.csv", header=True, inferSchema=True)
df.show()
Załóżmy, że plik dane.csv
zawiera dane o klientach, takie jak imię, wiek i miasto. header=True
informuje Sparka, że pierwszy wiersz to nagłówki kolumn, a inferSchema=True
próbuje automatycznie określić typy danych w kolumnach. Pamiętaj o poprawnym ustawieniu ścieżki do pliku CSV!
Po utworzeniu DataFrame, możemy wykonywać na nim różnego rodzaju operacje:
select()
:python
df.select("Imię").show()
df.select(["Imię", "Wiek"]).show()
filter()
lub where()
:python
df.filter(df.Wiek > 30).show()
df.where(df.Miasto == "Warszawa").show()
groupBy()
i funkcji agregujących (np. count()
, avg()
, sum()
):python
df.groupBy("Miasto").count().show()
df.groupBy("Miasto").agg({"Wiek": "avg"}).show()
dane.csv
)SparkSQL pozwala na wykonywanie zapytań SQL na DataFrame. To ułatwia pracę z danymi, jeśli znasz SQL. Najpierw musimy zarejestrować DataFrame jako tymczasową tabelę:
df.createOrReplaceTempView("klienci")
Teraz możemy używać spark.sql()
do wykonywania zapytań:
result = spark.sql("SELECT Imię, Wiek FROM klienci WHERE Miasto = 'Kraków'")
result.show()
Możemy również używać standardowych zapytań SQL, takich jak GROUP BY
, ORDER BY
, JOIN
, itp. To naprawdę potężne narzędzie!
Explore advanced insights, examples, and bonus exercises to deepen understanding.
Witaj! Po opanowaniu podstaw pracy z Spark DataFrames i SparkSQL, pora na głębsze zanurzenie. Dziś poszerzymy Twoją wiedzę, zagłębiając się w zaawansowane techniki i praktyczne zastosowania.
Znamy już podstawy, ale co dalej? Przyjrzyjmy się głębiej niektórym aspektom pracy z DataFrame:
EXPLAIN
do zrozumienia planu wykonania zapytania i identyfikacji wąskich gardeł. Poznaj techniki buforowania (cache
, persist
) dla przyspieszenia ponownych obliczeń. Pamiętaj o optymalizacji partycjonowania danych (repartition
, coalesce
) dla lepszego rozkładu obciążenia.udf
z pyspark.sql.functions
) mogą być wolniejsze niż natywne operacje Sparka – staraj się je minimalizować!StructType
, StructField
) pozwala na optymalizację przechowywania i wydajności. Praktyka: buduj schematy dynamicznie, aby radzić sobie z danymi o zmiennej strukturze.Przykład: Optymalizacja Zapytania
Załóżmy, że masz DataFrame z danymi o sprzedaży. Chcesz obliczyć sumę sprzedaży dla każdego produktu, ale zapytanie trwa długo. Użyj EXPLAIN
:
df.createOrReplaceTempView("sprzedaz")
zapytanie = """
SELECT produkt, SUM(wartosc) AS suma_sprzedazy
FROM sprzedaz
GROUP BY produkt
"""
df_wynik = spark.sql(zapytanie)
df_wynik.explain(True) # Pokaż plan wykonania
Z analizy planu wykonania możesz zidentyfikować problemy, np. zbyt dużą liczbę shuffle. Użyj repartition
, by zoptymalizować.
EXPLAIN
, aby zidentyfikować potencjalne problemy z wydajnością. Następnie spróbuj zoptymalizować zapytanie, używając cache
lub partycjonowania. Jakie zmiany zaobserwowałeś?Praca z Spark DataFrames i SparkSQL to umiejętność na wagę złota w wielu branżach:
Polski akcent: Wyobraź sobie, że pracujesz dla Allegro lub InPost. Znajomość SparkSQL i DataFrames to klucz do analizy milionów transakcji, śledzenia przesyłek i optymalizacji logistyki.
Oto kilka tematów, które warto zgłębić:
Powodzenia w dalszej nauce! Pamiętaj, praktyka czyni mistrza. Eksperymentuj, testuj i baw się danymi!
Utwórz RDD z danymi o produktach (nazwa, cena, kategoria) i przekształć je w DataFrame. Wyświetl zawartość DataFrame.
Wczytaj plik CSV (możesz pobrać przykładowy plik z internetu z danymi o sprzedaży). Wyświetl schemat DataFrame za pomocą `df.printSchema()`. Wyświetl kilka pierwszych wierszy za pomocą `df.show()`. Znajdź i wypisz liczbę wierszy i kolumn.
Na podstawie DataFrame z poprzedniego ćwiczenia, wybierz tylko kolumny "Produkt" i "Cena". Następnie, przefiltruj dane, aby wyświetlić tylko produkty, których cena jest powyżej 100 zł.
Wykorzystaj `groupBy` i funkcje agregujące, aby znaleźć średnią cenę produktów w każdej kategorii. Następnie, zarejestruj DataFrame jako tymczasową tabelę i wykonaj zapytanie SQL, aby znaleźć najdroższy produkt.
Wyobraź sobie, że pracujesz w sklepie internetowym. Masz pliki CSV z danymi o zamówieniach, produktach i klientach. Użyj Spark DataFrames i SparkSQL, aby analizować dane: obliczać średnią wartość zamówienia, znaleźć najczęściej kupowane produkty, segmentować klientów na podstawie ich wydatków.
Przygotuj się do następnej lekcji, zapoznając się z bardziej zaawansowanymi operacjami na DataFrame, takimi jak łączenie (join), obsługa brakujących danych i optymalizacja zapytań. Spróbuj również rozwiązać więcej problemów w SparkSQL.
We're automatically tracking your progress. Sign up for free to keep your learning paths forever and unlock advanced features like detailed analytics and personalized recommendations.