Wprowadzenie do Spark Dataset
Zestaw danych jest strukturą danych w Spark SQL, która zapewnia bezpieczeństwo typu kompilacji, obiektowy interfejs oraz optymalizację Spark SQL.
Koncepcyjnie jest to struktura tabelaryczna w pamięci, mająca wiersze i kolumny, które są rozmieszczone w wielu węzłach, takich jak ramka danych.
Jest to rozszerzenie Dataframe. Główną różnicą między zestawem danych a ramką danych jest to, że zestawy danych są silnie typowane.
(Zestaw danych) = (Rama danych + Bezpieczeństwo typu kompilacji)
Zestaw danych został wydany w Spark 1.6 jako eksperymentalny interfejs API. Zarówno ramka danych, jak i zestaw danych są ujednolicone w wersji Spark 2.0, a ramka danych staje się aliasem zestawu danych (wiersz).
Ramka danych = zestaw danych (wiersz)
Dlaczego potrzebujemy Spark Dataset?
Aby dobrze zrozumieć zbiór danych, musimy zacząć od nieco historii iskier i jej ewolucji.
RDD jest rdzeniem Spark. Zainspirowany przez SQL i dla ułatwienia, Dataframe został stworzony na szczycie RDD. Ramka danych jest odpowiednikiem tabeli w relacyjnej bazie danych lub DataFrame w Pythonie.
RDD zapewnia bezpieczeństwo typu kompilacji w czasie kompilacji, ale brak jest automatycznej optymalizacji w RDD.
Ramka danych zapewnia automatyczną optymalizację, ale brakuje jej bezpieczeństwa typu kompilacji.
Zestaw danych jest dodawany jako rozszerzenie ramki danych. Zestaw danych łączy funkcje zarówno RDD (tj. Bezpieczeństwo typu kompilacji), jak i Dataframe (tj. Automatyczna optymalizacja Spark SQL).
(RDD (Spark 1.0)) -> (Dataframe (Spark1.3)) -> (Dataset (Spark1.6))
Ponieważ zestaw danych ma bezpieczeństwo podczas kompilacji, dlatego jest obsługiwany tylko w języku kompilowanym (Java i Scala), ale nie w języku interpretowanym (R & Python). Ale interfejs API Spark Dataframe jest dostępny we wszystkich czterech językach (Java, Scala, Python i R) obsługiwanych przez Spark.
Język obsługiwany przez Spark | Interfejs API ramki danych | Interfejs API zestawu danych |
Język kompilowany (Java i Scala) | TAK | TAK |
Język interpretowany (R & Python) | TAK | NIE |
Jak utworzyć zestaw danych Spark?
Istnieje wiele sposobów tworzenia zestawu danych w oparciu o przypadek użycia
1. Najpierw utwórz SparkSession
SparkSession to pojedynczy punkt wejścia do aplikacji Spark, która umożliwia interakcję z podstawową funkcjonalnością Spark i programowanie Spark za pomocą interfejsów API DataFrame i Dataset.
val spark = SparkSession
.builder()
.appName("SparkDatasetExample")
.enableHiveSupport()
.getOrCreate()
- Aby utworzyć zestaw danych przy użyciu podstawowej struktury danych, takiej jak Zakres, Sekwencja, Lista itp.:
Korzystanie z zakresu
Używanie sekwencji
Korzystanie z listy
- Aby utworzyć zestaw danych przy użyciu sekwencji klas spraw, wywołując metodę .toDS ():
- Aby utworzyć zestaw danych z RDD przy użyciu .toDS ():
- Aby utworzyć zestaw danych z ramki danych za pomocą klasy przypadków:
- Aby utworzyć zestaw danych z ramki danych za pomocą Tuples:
2. Operacje na zestawie danych Spark
- Przykład liczby słów
- Konwertuj Spark Dataset na Dataframe
Możemy również przekonwertować Spark Dataset na Datafame i korzystać z interfejsów API Dataframe, jak poniżej:
Funkcje Spark Dataset
- Wpisz Bezpieczeństwo
Zestaw danych zapewnia bezpieczeństwo typu kompilacji. Oznacza to, że składnia, a także błędy analizy aplikacji, zostaną sprawdzone podczas kompilacji przed uruchomieniem.
- Niezmienność
Zestaw danych jest również niezmienny, jak RDD i Dataframe. Oznacza to, że nie możemy zmienić utworzonego zestawu danych. Za każdym razem, gdy tworzony jest nowy zestaw danych, gdy do zbioru danych jest stosowana transformacja.
- Schemat
Zestaw danych to struktura tabelaryczna w pamięci, która ma wiersze i nazwane kolumny.
- Wydajność i optymalizacja
Podobnie jak Dataframe, zestaw danych wykorzystuje również Catalyst Optimization do generowania zoptymalizowanego logicznego i fizycznego planu zapytań.
- Język programowania
Interfejs API zestawu danych jest obecny tylko w Javie i Scali, które są skompilowanymi językami, ale nie w Pythonie, który jest językiem interpretowanym.
- Leniwa ocena
Podobnie jak RDD i Dataframe, zestaw danych wykonuje również leniwą ocenę. Oznacza to, że obliczenia mają miejsce tylko wtedy, gdy wykonywane jest działanie. Spark tworzy tylko plany podczas fazy transformacji.
- Serializacja i wyrzucanie elementów bezużytecznych
Zestaw danych Spark nie używa standardowych serializatorów (serializacja Kryo lub Java). Zamiast tego wykorzystuje szybkie enkodery Tungsten w pamięci, które rozumieją wewnętrzną strukturę danych i mogą skutecznie przekształcać obiekty w wewnętrzną pamięć binarną. Wykorzystuje szeregowanie danych poza stertą za pomocą enkodera Tungsten, a zatem nie ma potrzeby zbierania śmieci.
Wniosek
Zestaw danych jest najlepszym z RDD i Dataframe. RDD zapewnia bezpieczeństwo typu kompilacji w czasie kompilacji, ale nie ma automatycznej optymalizacji. Ramka danych zapewnia automatyczną optymalizację, ale brakuje jej bezpieczeństwa typu kompilacji. Zestaw danych zapewnia zarówno bezpieczeństwo typu kompilacji, jak i automatyczną optymalizację. Dlatego zestaw danych jest najlepszym wyborem dla programistów Spark korzystających z Java lub Scali.
Polecane artykuły
To jest przewodnik po Spark Dataset. W tym rozdziale omawiamy sposób tworzenia zestawu danych Spark na wiele sposobów za pomocą przykładów i funkcji. Możesz także zapoznać się z następującymi artykułami, aby dowiedzieć się więcej -
- Polecenia Spark Shell
- Pytania do wywiadu Spark
- Kariera w Spark
- Spark Streaming
- Różne operacje związane z krotkami
- Spark SQL Dataframe
- Rodzaje złączeń w Spark SQL (przykłady)
- Przewodnik po liście poleceń powłoki Unix
- Top 6 komponentów Spark