Wprowadzenie do Apache Spark: uruchamianie zadań
Apache Spark to oprogramowanie, które pozwala sprawnie przetwarzać i analizować duże zbiory danych (naprawdę duże). Jest szybkie (bardzo szybkie!), skalowalne i wspiera różne języki programowania, dzięki czemu można go używać zarówno do prostych analiz, jak i bardziej zaawansowanych zadań. Spark ułatwia automatyzację pracy z danymi i pozwala szybciej uzyskać potrzebne wyniki.
Apache Spark może działać nie tylko na wydajnych serwerach - możesz je mieć nawet na swoim własnym laptopie i ten laptop może posłużyć Ci do całkiem zaawansowanych analiz. Dlatego warto zapoznać się z możliwościami tego oprogramowania.
Dwa sposoby uruchamianie zadań
Pomijamy tutaj uruchamianie skryptów pythona napisanych w pyspark (jeśli zaistalujesz Spark jako moduł pyspark do pythona). Moduł PySpark zainstalowany przez pip działa w trybie lokalnym i uruchamia Spark tylko na pojedynczym komputerze, pod pełną kontrolą Pythona, bez możliwości użycia języka Scala ani pełnego rozproszonego przetwarzania. Dlatego sprawdza się głównie do testów, nauki i eksperymentów, ale nie do przetwarzania dużych zbiorów danych w produkcji.
spark-shell (pyspark)
Spark-shell stosuje się, gdy chcemy interaktywnie testować i eksplorować dane w Sparku przy użyciu Scali, bez konieczności pisania pełnej aplikacji. Jest idealny do szybkiego prototypowania, nauki Sparka i eksperymentów z operacjami na RDD (Resilient Distributed Dataset) czy DataFrame.
Nasz plik z danymi do testów ma strukturę (pobierz plik):
customer_number;sales_amount;sales_date
9;4089.54;2024-12-13
18;6579.65;2025-04-19
20;6005.84;2024-08-02
7;2026.39;2024-12-28
20;6870.04;2024-01-12
17;4454.97;2025-04-10
5;1116.2;2024-07-28
15;1463.37;2025-04-13
3;1229.04;2024-08-20
1;2397.96;2024-06-08
5;4005.88;2025-02-04
8;8435.51;2024-03-15
16;6749.28;2023-10-22
3;9665.37;2024-10-26
4;5635.03;2025-09-14
1;8108.14;2024-09-29
5;1522.14;2025-06-15
11;9610.69;2025-01-24
3;6675.06;2025-06-11
2;4545.24;2025-05-30
Plik zapisz do dowolnego katalogu na swoim PC. Środowisko WSL umożliwia odczyt plików z katalogów Windows jakby to był ten sam system operacyjny. Jeśli katalogiem w którym masz ten plik jest dysk G:, pełna ścieżka 'G:\ApacheSpark\Data', dla WSL będzie to scieżka '/mnt/g/ApacheSpark/Data/'. Sprawdź to wpisując w shell'u WSL następujące polecenie:
ls /mnt/g/ApacheSpark/Data/
W ten sposób otrzymasz listę plików które znajdują się w katalogu. Jeśli masz już uruchomione okno WSL (poprzez Powershell), uruchom shell Spark wpisując spark-shell. Kiedy uruchamiasz spark-shell, Spark automatycznie włącza REPL (Read-Eval-Print Loop) dla Scali. Spark-shell jest REPL-em tylko języka Scala. Jeśli masz kod Python'a, uruchom REPL który obsługuje skrypty pyspark wpisujac pyspark w shellu WSL.
Zróbmy pierwsze ćwieczenie - odczytajmy pierwszych 10 wierszy z powyższego pliku wklejając kod napisany w Scala bezpośrednio do okna spark-shell:
// Utworzenie SparkSession
val spark = org.apache.spark.sql.SparkSession.builder()
.appName("Odczyt CSV")
.getOrCreate()
// Ścieżka do pliku w WSL
val plik_csv = "/mnt/g/ApacheSpark/Data/sales_data.csv"
// Wczytanie CSV z separatorem ';' i nagłówkiem
val df = spark.read
.option("header", "true")
.option("sep", ";")
.csv(plik_csv)
// Wyświetlenie pierwszych 10 wierszy
df.show(10)
// Zakończenie sesji Spark
spark.stop()
Instalacja Apache Spark w środowisku WSL (Windows Subsystem for Linux)
Apache Spark w WSL (dla testów) jest lepszym pomysłem niż instalacja tego oprogramowania w Windows lub VM Hyper-V, bo WSL łączy zalety natywnego Linuxa z wygodą Windows, bez ciężaru pełnej maszyny wirtualnej, co idealnie nadaje się do testów Spark. Instalacja Apache Sparka bezpośrednio w Windowsie nie jest dobrym pomysłem, ponieważ wiele funkcji i integracji zaprojektowanych pod Linuxa może nie działać poprawnie, a ścieżki i narzędzia systemowe często powodują problemy kompatybilności. Dodatkowo wydajność operacji wejścia/wyjścia i procesów jest zazwyczaj niższa niż w środowisku Linux, co utrudnia realistyczne testy.
-
Środowisko Linuxa – Spark jest natywnie tworzony dla Linuxa, więc w WSL działa tak, jak na produkcyjnym Linuxie.
-
Szybkie uruchamianie – WSL startuje w kilka sekund, w przeciwieństwie do VM, która wymaga pełnego bootu.
-
Niska konsumpcja zasobów – WSL używa mniej RAM/CPU niż pełna VM.
-
Integracja z Windows – łatwy dostęp do plików, narzędzi i edytorów Windows bez kopiowania danych między systemami.
-
Łatwa konfiguracja i testy – instalacja pakietów Linuxowych, Python, Java działa bez problemów, tak jak w Linuxie produkcyjnym.
Sprawdzanie czy masz już gotowe środowisko WSL
Jeśli nie wiesz czy masz już środowisko WSL na swoim PC, uruchom terminal Powershell jako administrator i wpisz komendę:
wsl --list --all
Jeśli WSL jest zainstalowane, zobaczysz coś podobnego:
Windows Subsystem for Linux Distributions:
Ubuntu (Default)
docker-desktop
Możesz wtedy zaktualizować środowisko wpisując:
wsl --update
W przypadku jeśli nie masz środowiska WSL, zainstaluj je wpisująć polecenie:
wsl --install
Domyślnie zainstalujesz w ten sposób dystrybujcę Ubuntu.
Uruchamianie WSL
Uruchom okno Powershell z uprawnieniami administratora i wpisz polecenie:
wsl
Jeśli masz więcej niż jedną zainstalowaną dystrybucję, możesz uruchomić konkretną, w tym przypadku Ubuntu:
wsl -d Ubuntu
Jeśli zobaczysz komunikat jak poniżej, oznacza to że Twoja maszyna nie ma włączonej wirtualizacji.
WSL2 is not supported with your current machine configuration. Please enable the "Virtual Machine Platform" optional component and ensure virtualization is enabled in the BIOS. Enable "Virtual Machine Platform" by running: wsl.exe --install --no-distribution For information please visit https://aka.ms/enablevirtualization Error code: Wsl/Service/CreateInstance/CreateVm/HCS/HCS_E_HYPERV_NOT_INSTALLED
Wykonaj wtedy dwie czynności. Włącz wirtualizacje w BIOS dla procesora oraz uruchom komponent wirtualnej maszyny w Windows (Powershell):
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
Po poprawnym uruchomieniu WSL aktualną scieżką jest katalog 'c/Windows/System32' - przejdz do głownego katatalogu domowego WSL wpisując:
cd ~
KNIME czy Pentaho?
Do przetestowania KNIME zabierałem się od dłuższego czasu - nawet trochę dłużej. Kiedyś nawet zainstalowałem to oprogramowanie na swoim PC ale zraził mnie siermiężny interfejs, brak responsywności, złe skalowanie, nachodzące na siebie elementy okien dialogowych - nie wyglądało to profesjonalnie. Oprogramowanie zajmowało wiele miejsca na dysku i wyglądało na ciężkie - jego uruchomienie wymagało czasu. Nie pamiętam już gdzie ale niedawno gdzieś w Internecie przed moimi oczami pojawiła się reklama KNIME „Sophisticated analytics, intuitive interface. Our promise: to build the most intuitive and widely‑used environment for data science”. Dajmy zatem KNIME jeszcze jedną szansę.
Jeśli wpiszemy w Google "most popular etl tools" to nie zobaczymy żadnego linku do strony wymieniającej KNIME na pierwszej stronie. Dużo wiekszy optymizm jeśli wpiszemy "most popular Data Analytics / Data Science Platform" - wtedy duża szansa że link do informacji o tym oprogramowaniu będzie na pierwszej stronie rezultatów wyszukiwania. I to mówi nam jak to oprogramowanie jest postrzegane na rynku, jak jest użytkownane. KNIME samo o sobie mówi że jest oprogramowaniem "ETL, analityka danych, predykcyjna sztuczna inteligencja i tworzenie agentów świadomych danych". Rynek wykorzystuje to oprogramowanie właśnie głownie do "analizy i eksploracji danych", rzadziej jako typowy ETL.
Pierwsze wrażenie - instalacja i interfejs KNIME
Dużym plusem jest to, że oprogramowanie nie wymaga 'instalacji' - wystarczy po prostu rozpakować pobrany plik do dowolnego katalogu PC. Możemy pobrać z ich strony zip lub exe ktory sam rozpakuje się wskazanego katalogu. W przypadku 'self-extracting archive' dla Windows (można też pobrać wersję dla Linux) będzie to plik 634 MB. Po rozpakowaniu na dysku komputera, zajmie on około 1.2GB. Oprogramowanie do działania nie wymaga żadnej bazy danych.
Oprogramownie napisane zostało w Java (Eclipse) i dlatego bardzo lubi pamięć - możesz uruchomić go mając 4GB RAM ale optymalnie twój komputer powinien posiadać nie mniej niż 8GB RAM dla programu. Przed uruchomieniem wejdz do pliku knime.ini (ten sam katalog w ktorym uruchamiasz knime.exe) i ustaw zmienną '-Xmx' (np. -Xmx10g).
Nowy KNIME wygląda ładnie. Nie razi już siermieżny wygląd ikon wezłów ('nodes') i połączeń miedzy nimi. Widać że programiści włożyli w poprawę wyglądu dużo pracy. Niestety, nadal jest problem ze skalowaniem okien dialogowym i np. po otwarciu właściwości węzłów trzeba okna powiekszać ręcznie by ujrzeć wszystkie informacje. Niektóre pola są zbyt wąskie i trzeba je rozciągać myszką, czcionki mikroskopijne i nieczytelne. Pentaho Kettle/PDI prezentuje się w tej kategorii nieco lepiej.
Przepływy, węzły - podstawowe komponenty KNIME
Jak w każdym narzędziu ETL i podobnym mamy workflow (w Pentaho jest to 'Transformation') na którym umieszczamy węzły (nazwane 'nodes') które sterują przepływem lub wykonują pewną pracę w przepływie. W Pentaho te węzły nazywają się 'steps'. Dokumentację KNIME znajdziemy na stronie producenta oprogramowania.

W Pentaho PDI/Kettle mamy pojęcie 'jobs' których używamy do organizacji bardziej złożonych struktur, uruchamiania warunkowego, definicji zmiennych dla przepływów... W KNIME nie mamy jobs - możemy uzyskać podobną fukcjonalność stosując komponenty, parametry, warunki. - wszystko osadzone na poziomie workflow. Wydaje się że Pentaho zapewnia lepszą czytelność i logiczność podziału tej struktury na Transformacje i Zadania, szczególnie jeśli budujemy przepływy ETL.
Często nasz przepływ zawiera tak wiele węzłów że umieszczenie ich na jednym workflow powoduje iż nie jest on czytelny - dużo lepszym pomysłem jest rozbicie takiego przepływu na kilka i połączenie ich strukturą nadrzędną. To co w KNIME nie zachwyca to przechowywanie ustawień Workflows. W Pentaho zarówno transformacje jak i jobs sa przechowywane W JEDNYM pliku, w formacie XML. Plikom można nadać logiczne nazwy, ważą trywialnie mało, są łatwe do przenoszenia między użytkownikami, platformami. Tymczasem KNIME przechowuje ustawienia każdego workflow w katalogu i wielu plików. Każdy z węzłów ma swoj podkatalog. Mogą się tam także znaleźć dane jeśli są buforowane. Wiele plików zajmujących całkiem sporo miejsca na dysku. W tej kategorii zdecydowanym zwycięzcą jest Pentaho.
Analiza koszyka zakupowego algorytmem FPGrowth
Jeśli już jesteś na tej stronie, zapewne wiesz czym jest 'analiza koszyka zakupowego'. Dla wszystkich pozostałych którki wstęp: analiza koszyka zakupowego to technika eksploracji danych, która analizuje wzorce współwystępowania i określa siłę powiązania między produktami kupowanymi razem. Nazywamy ją również eksploracją częstych zestawów przedmiotów lub analizą asocjacji. Wykorzystuje ona te wzorce rozpoznawane w zakupach klientów, aby zrozumieć ich zachowania - zidentyfikowanie relacji między przedmiotami kupowanymi przez klientów.
Źródłem wzorców, jest ogromna ilość danych; transakcji zakupowych. Takie analizy pomagają to w procesach podejmowania decyzji związanych z marketingiem krzyżowym, projektowaniem katalogów, rekomendacjami produktów w sklepach internetowych itd.
Dla przykładu; kiedy klienci kupują piwo, mogą również kupić orzeszki. Ta relacja jest przedstawiona jako warunek, jak poniżej.
JEŚLI piwo TO orzeszki
To oznacza, że produkty podane po prawej stronie są częściej kupowane razem z produktami po lewej stronie. Analiza koszyka zakupowego w eksploracji danych pomaga nam lepiej zrozumieć te zależności i pokazuje zależność decyzji zakupowych.
Najczęściej stosowane algorytmy w analizie koszyka zakupowego
Apriori (zobacz opis jego użycia)
– klasyczny algorytm generowania częstych zestawów i reguł asocjacyjnych.
– podstawowy w wielu bibliotekach (np. mlxtend, Orange, Weka).
Eclat
– oparty na przecięciach zbiorów transakcji (tidsets).
– szybki przy mniejszych przestrzeniach cech.
FP-Growth (Frequent Pattern Growth)
– wydajniejszy niż Apriori, bo unika generowania zbędnych kandydatów.
– używa struktury drzewa (FP-tree).
Przykłady które znajdziesz w Internecie najczęściej bazują właśnie na Apriori. Ten algorytm jest dobrym wyborem dla demonstracji odnajdywania reguł asocjacyjnych, do testów, ale zupełnie nie nadaje się do zastosowania w realnym świecie gdzie mamy setki tysiecy a nawet miliony transakcji, gdzie transakcje mogą zawierać nawet dziesiątki artykułów. Elcat także jest algorytmem który może być użyty tylko dla analizy niewielkich zbiorów danych.
Uruchomienie algorytmu FP-Growth
Jeśli planujesz analizować prawdziwe zbiory danych, realne transakcje klientów, najlepszym pomysłem będzie użycie środowiska Apache Spark. To oprogramowanie posiada implementację algorytmu FP-Growth. Analizę koszykową w Apache Spark z użyciem FP-Growth warto wykonywać ze względu na możliwość efektywnego przetwarzania bardzo dużych zbiorów danych, optymalne wykorzystanie pamięci dzięki kompresji wzorców oraz przetwarzanie rozproszone, które pozwala na szybkie wykonanie obliczeń na wielu maszynach jednocześnie.