W dzisiejszej lekcji zapoznasz się z Apache Spark, popularnym narzędziem do przetwarzania dużych zbiorów danych. Nauczysz się uruchamiać SparkShell i pracować z podstawowym elementem Sparka - RDD (Resilient Distributed Datasets), wykonując proste operacje transformacji i akcji.
Apache Spark to potężny silnik przetwarzania danych, zaprojektowany do szybkiego i wydajnego przetwarzania dużych zbiorów danych. Jest szybszy od MapReduce i oferuje bardziej zaawansowane możliwości. Spark działa w klastrze komputerów i jest popularny w analizie danych, uczeniu maszynowym i przetwarzaniu strumieniowym. Dziś skupimy się na podstawach, wykorzystując SparkShell, interaktywną powłokę do eksploracji danych.
Aby uruchomić SparkShell, musisz mieć zainstalowany Apache Spark. Po instalacji, w terminalu wpisz: spark-shell
. Powinieneś zobaczyć powłokę Scala z promptem scala>
. SparkShell pozwala na interaktywne wykonywanie kodu Spark. To doskonałe miejsce do nauki i eksperymentowania.
RDD to podstawowa abstrakcja w Sparku. Jest to niezmienna, rozproszona kolekcja elementów, działająca równolegle na wielu węzłach w klastrze. RDD są odporne na błędy, ponieważ Spark automatycznie odbudowuje dane, jeśli jeden z węzłów zawiedzie. RDD można tworzyć na wiele sposobów, np. z listy w pamięci lub z pliku tekstowego.
Tworzenie RDD z listy: scala
val liczby = List(1, 2, 3, 4, 5)
val rddLiczby = sc.parallelize(liczby)
Tworzenie RDD z pliku tekstowego: Zakładamy, że mamy plik tekst.txt
w folderze. scala
val rddTekst = sc.textFile("tekst.txt")
sc
to kontekst Sparka, który jest dostępny w SparkShell.
Operacje na RDD dzielą się na transformacje (zwracają nowe RDD) i akcje (zwracają wynik do drivera). Przykłady:
* map(func)
: Aplikuje funkcję func
do każdego elementu RDD. Przykład: rddLiczby.map(x => x * 2)
(mnoży każdy element przez 2).
* filter(func)
: Filtruje elementy RDD na podstawie funkcji func
. Przykład: rddLiczby.filter(x => x > 2)
(wybiera liczby większe od 2).
* reduce(func)
: Agreguje elementy RDD za pomocą funkcji func
. Przykład: rddLiczby.reduce((x, y) => x + y)
(sumuje wszystkie liczby).
* count()
: Zwraca liczbę elementów w RDD. Przykład: rddLiczby.count()
* collect()
: Zwraca wszystkie elementy RDD jako listę do drivera. Uwaga: Może powodować problemy z pamięcią dla dużych RDD!
2. Podziel wiersze na słowa: ```scala
val slowa = rdd.flatMap(wiersz => wiersz.split(" "))
``` `flatMap` jest podobny do `map`, ale spłaszcza wynik.
3. Przypisz wartość 1 do każdego słowa: ```scala
val slowaZLicznikiem = slowa.map(slowo => (slowo, 1))
5. Wyświetl wynik: ```scala
zliczanieSlow.collect().foreach(println)
Explore advanced insights, examples, and bonus exercises to deepen understanding.
Świetnie, dzisiaj zanurzamy się głębiej w świat Apache Spark! Po zapoznaniu się z podstawami, czas na bardziej zaawansowane techniki i zrozumienie, jak Spark działa "pod maską". Celem jest nie tylko obsługa danych, ale także zrozumienie, jak efektywnie przetwarzać gigantyczne zbiory danych.
Zrozumienie architektury Sparka jest kluczowe dla efektywnego wykorzystania jego potencjału. Spark bazuje na koncepcji Resilient Distributed Datasets (RDD), ale warto wiedzieć, co dzieje się za kulisami. Spark dzieli pracę na zadania (tasks), które są wykonywane przez wykonawców (executors) działających na różnych węzłach (nodes) w klastrze. Proces koordynuje menedżer klastra (cluster manager), np. YARN, Mesos lub Spark standalone.
Optymalizacja: Jednym z najważniejszych aspektów jest optymalizacja zadań Sparka. Obejmuje to:
Przykład: Wyobraź sobie analizę logów z serwera WWW. Przetwarzanie danych w Sparku (w skrócie): 1. Wczytanie danych (RDD z plików logów). 2. Filtrowanie błędów (filter). 3. Ekstrakcja adresów IP (map). 4. Zliczanie unikalnych adresów (countByValue).
Masz plik CSV zawierający dane o sprzedaży (np. nazwa produktu, cena, ilość). Użyj Sparka, aby obliczyć:
Wskazówka: Użyj `map()` do przekształcenia wierszy CSV na obiekty, a następnie `reduceByKey()` lub `groupByKey()` do agregacji.
Stwórz funkcję, która przyjmuje stringa jako input i zwraca jego długość. Użyj jej w Sparku do przeliczenia długości każdego słowa w tekście.
Wskazówka: W SparkShell możesz zdefiniować funkcję w języku Python (jeśli używasz PySpark) lub Scala (jeśli używasz Scala Spark). Następnie użyj tej funkcji w `map()`.
Przykłady zastosowania Sparka są wszechobecne:
W codziennym życiu: Systemy rekomendacji w sklepach internetowych (np. Allegro, Amazon) opierają się na podobnych technologiach.
Spróbuj zaimplementować proste machine learning (MLlib) w Sparku. Wykorzystaj klasyfikację lub regresję na małym zestawie danych (np. Iris dataset lub dane z kaggle).
Wskazówka: Zapoznaj się z biblioteką MLlib Sparka. Spróbuj przewidzieć typ kwiatu na podstawie jego cech.
Pamiętaj, praktyka czyni mistrza! Im więcej eksperymentujesz, tym lepiej zrozumiesz Sparka. Szukaj realnych danych i rozwiązuj problemy!
Uruchom SparkShell. Utwórz RDD z listą liczb od 1 do 10. Użyj `map` do podniesienia każdej liczby do kwadratu. Następnie użyj `filter` aby wybrać tylko liczby większe od 20. Wyświetl wynik za pomocą `collect()`.
Użyj pliku `tekst.txt`. Rozwiń przykład zliczania słów, aby przefiltrować słowa, które są krótsze niż 3 znaki. Zlicz tylko słowa dłuższe lub równe 3 znakom. Wyświetl wynik.
Utwórz RDD z pliku CSV (użyj dowolnego pliku CSV). Wyświetl pierwsze 5 wierszy. (Wskazówka: Użyj `take(5)` zamiast `collect()`.)
Wyobraź sobie, że pracujesz dla lokalnej gazety i chcesz przeanalizować popularność tematów w artykułach. Możesz użyć Sparka do zliczenia słów kluczowych w artykułach, identyfikacji najczęściej używanych słów i określenia trendów tematycznych. Wykorzystaj poznane techniki do przeprowadzenia takiej analizy.
Przed następną lekcją przygotuj się na poznanie bardziej zaawansowanych operacji na RDD oraz pracy z klucz-wartość parami (Pair RDDs) w Sparku. Zapoznaj się z pojęciem transformacji i akcji w Sparku.
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.