home_site

Lab01 - Apache Spark [ ver. ChO.2025.11.03.003 ]

Zawartość strony

Apache Spark

Tematyka zajęć:

  1. Apache Spark - środowiska uruchomieniowe
  2. Pliki RDD, transformacje i akcje w Apache Spark
  3. Środowisko Jupyter. Skrypty w języku Scala - struktury RDD
  4. Środowisko Jupyter. Scala - struktury DataFrames
  5. Środowisko Jupyter. Scala - przetwarzanie plików CSV
  6. Środowisko Jupyter. Python - obsługa struktur RDD
  7. Środowisko Jupyter. Python - obsługa struktur DataFrames
  8. Środowisko Jupyter. Python - przetwarzanie plików tekstowych
  9. Środowisko Jupyter - Python - przetwarzanie danych z relacyjnej bazy danych
  10. Zadania do realizacji

Pliki do realizacji zadań:

A. Apache Spark - narzędzie Spark i środowiska uruchomieniowe

  1. Program Spark - punkt startowy do analizy danych BigData:
    • tworzymy aplikacje w lokalnym środowisku korzystając z interfejsów wysokiego poziomu,
    • interaktywne korzystanie i stosowanie złożonych algorytmów,
    • różne metody przetwarzania danych: zapytania SQL, przetwarzanie tekstów, systemy uczące i czy przetwarzające grafy,
    • przygotowane aplikacje można uruchomić na wielu węzłach uruchomionych w ramach klastra Spark.
  2. Oprogramowanie Apache Spark można uruchomić w ramach systemu Linux i Windows jako aplikacje jednostanowiskowe. Do realizacji projektów w środowisku jednostanowiskowym można skorzystać z platformy Jupyter w której zintegrowano program Spark w ramach narzędzia pyspark
  3. Oprogramowanie można zainstalować lokalnie lub korzystając z przygotowanego kontenera Docker.
  4. Środowisko uruchomieniowe Jupyter.

B. Pliki RDD, transformacje i akcje w Spark

  1. Środowisko Apache Spark zawiera kilka elementów. Rysnek 1 przedstawia ekosystem programu Apache Spark.
    Lab1_spark_eco
    Rys.1 Ekosystem programu Apache Spark
  2. Przetwarzanie zadań w środowisku Apache Spark (rys.2).
    Lab1_spark_exe
    Rys.2 Wykonywanie zadań w środowisku Apache Spark
  3. Zadania w ramach technologii Spark wykonywane są poprzez akcje i transformacje. W trakcie przetwarzania danych Spark tworzy pliki RDD ( Resilient Distributed Datasets ), które są niemodyfikowalne. Poprzez transforamcję otrzymujemy kolejny plik RDD. Do zapisu lub prezenatcji wykorzystujemy akcje. Istnieje możliwość odczytu danych z różnych źródeł tj. standardowe pliki CSV, pliki systemu HDFS, bazy danych czy dane strumieniowe. Po przetworzeniu danych system Spark umożliwia zapis danych do standardowych plików, plików systemu HDFS lub do baz danych typu HBase czy Cassandra.

    Przykładowe transformacje plików w systemie Spark.

    map (func)
    Zwraca nowy rozproszony zestaw danych utworzony przez przepuszczenie każdego elementu źródła przez funkcję func.
    flatMap (func)
    Stosuje funkcję na każdym elemencie w RDD i zwraca RDD z zawartością zwróconych iteratorów. Często stosowana do wyodrębnienia słów.
    filter (func)
    Zwraca nowy zestaw danych utworzony przez wybranie tych elementów źródła, dla których func zwraca true
    sample (withRe placement, fraction, [seed])
    Próbkowanie RDD z zastępowaniem lub bez.
    distinct ([numTasks]))
    Zwraca nowy zestaw danych, który zawiera różne elementy źródłowego zestawu danych
    union (otherDataset)
    Zwraca nowy zestaw danych, który zawiera połączenie elementów w źródłowym zestawie danych i zawartych w argumencie.
    intersection (otherDataset)
    Zwraca nowy RDD, który zawiera przecięcie elementów zawartych w źródłowym zbiorze danych i zawartym w argumencie.
    subtract (otherDataset)
    Zwraca nowy RDD, który usuwa zawartość RDD zawartego w argumencie.
    join (otherDataset, [numTasks])
    Gdy jest wywoływany w zestawach danych typu (K, V) i (K, W), zwraca zestaw danych par (K, (V, W)) ze wszystkimi parami elementów dla każdego klucza. Połączenia zewnętrzne są obsługiwane przez leftOuterJoin, rightOuterJoin i fullOuterJoin.
    groupByKey ([numTasks])
    reduceByKey (func, [numTasks])
    Łączy elementy z takim samym kluczem.
    aggregateByKey (zeroValue) (seqOp, combOp, [numTasks])
    sortByKey (asceding=True, numPartitions=None, keyfunc =<function <lambda>>)
    Zwraca RDD posortowany według klucza.
    keys()
    Zwraca RDD złożony z samych kluczy.
    values()
    Zwraca RDD złożony z samych wartości.

    Przykładowe akcje realizowane w ramach programu Apache Spark.

    collect ()
    Zwraca wszystkie elementy zestawu danych jako tablicę w programie sterownika. Jest to zwykle przydatne po filtrze lub innej operacji, która zwraca wystarczająco mały podzbiór danych.
    count ()
    Zwraca liczbę elementów w zestawie danych.
    countByValue ()
    Liczba wystąpień każdego elementu w RDD.
    take(num)
    Zwraca num elementów z RDD.
    takeSample(withReplacement, num, [seed])
    Zwraca num elementów w sposób losowy.
    first()
    Zwraca pierwszy element.
    reduce (func)
    Agreguje elementy zestawu danych za pomocą funkcji func (która pobiera dwa argumenty i zwraca jeden). Funkcja powinna być przemienna i asocjacyjna, aby mogła być poprawnie przetwarzana równolegle.
    countByKey()
    Liczy elementy każdego klucza.
    lookup(key)
    Zwraca wszystkie wartości związane z podanym kluczem.

C. Środowisko Jupyter. Skrypty w języku Scala - struktury RDD

D. Środowisko Jupyter. Scala - struktury DataFrames


W przeciwieństwie do RDD dane są uporządkowane w nazwane kolumny, np. tabela w relacyjnej bazie danych. DataFrames nakłada strukturę na rozproszony zbiór danych, umożliwiając abstrakcję wyższego poziomu.

Przykładowe zadania do realizacji w ramach niniejszego punktu.

E. Środowisko Jupyter. Scala - przetwarzanie plików CSV


W ramach tego punktu zostanie przedstawione przetwarzanie danych z plików CSV w ramach plików RDD lub DataFrames.

F. Środowisko Jupyter. Python - obsługa struktur RDD


W ramach zajęć będziemy realizowali zadania wykorzystując pyspark w środowisko Jupyter. W ramach notatnika Yupyter tworzymy nowy projekt wybierając z menu przycisku "New" - Python.

G. Środowisko Jupyter. Python - obsługa struktur DataFrames


W przeciwieństwie do RDD dane są uporządkowane w nazwane kolumny, np. tabela w relacyjnej bazie danych. DataFrames nakłada strukturę na rozproszony zbiór danych, umożliwiając abstrakcję wyższego poziomu.

H. Środowisko Jupyter. Python - przetwarzanie plików tekstowych


W ramach tego punktu zostanie przedstawione przetwarzanie danych z plików CSV lub logów w ramach plików RDD lub DataFrames.

J. Zadania do realizacji

Zadanie 1
W ramach zadania należy opracować polecenie tworzącą listę osób na poszczególnych stopniach studiów wg. wzoru: [stopień] { [Nazwisko, Imię, semestr], ... }. Rysunek 3 przedstawia przykładowy wynik polecenia.
Lab1_Spark_task_1
Rys.3 Lista osób na poszczególnych stopniach studiów
Zadanie 2
W ramach zadania należy opracować polecenie zwracające statystykę imion. Rysunek 4 przedstawia przykładowy wynik polecenia.
Lab1_Spark_task_2
Rys.4 Statystyka imion w zbiorze danych