Spis treści 18 sekcji

Spark SQL to moduł Apache Spark do analizy danych strukturalnych, czyli takich, które mają określony schemat. Można w nim pisać zapytania SQL albo korzystać z API DataFrame dostępnego w 4 językach: Javie, Scali, Pythonie i R.1 Ten poradnik pomaga wybrać sposób pracy, odczytać plan wykonania zapytania i przetwarzać duże zbiory danych. Spark SQL po raz pierwszy udostępniono w Apache Spark 1.0.0.2

Czym jest Spark SQL i jak łączy sposoby pracy z danymi?

Spark SQL pozwala opisać operacje na danych zapytaniem SQL lub wywołaniami API DataFrame. DataFrame jest zbiorem danych z nazwanymi kolumnami i schematem określającym ich typy. Dataset dodaje do tego modelu typ obiektu używany w kodzie Java lub Scala. Jego typowane API jest dostępne w dwóch językach: Javie i Scali.3

Spark SQL zamienia opis operacji w plan, który silnik Spark wykonuje na danych. Analityk może zapisać agregację w SQL, a programista zbudować ją przez API. Wybór zależy od tego, czy logikę łatwiej przedstawić jako zapytanie, czy jako kod aplikacji. Catalyst przetwarza zapytanie w czterech głównych fazach: analizie, optymalizacji logicznej, planowaniu fizycznym i generowaniu kodu.4

Jak Spark SQL łączy zapytania SQL z API DataFrame i Dataset?

Spark SQL łączy oba interfejsy wspólnym modelem operacji. Zapytanie SQL zwraca DataFrame, który można dalej przekształcać przez API. DataFrame utworzony w kodzie można z kolei udostępnić jako widok, aby SQL odczytywał jego kolumny pod ustaloną nazwą. Dataset zachowuje określony typ obiektu podczas pracy w Javie lub Scali. Zwykły widok tymczasowy istnieje tylko w obrębie sesji Spark, z którą jest związany.5

  • Zapytanie SQL opisuje wybór kolumn, filtrowanie lub agregację za pomocą składni zapytań.
  • API DataFrame buduje te same operacje metodami wywoływanymi w kodzie aplikacji.
  • Dataset wiąże dane z typem obiektu, gdy aplikacja korzysta z typowanego API.

Wynik zapytania SQL może posłużyć do dalszej pracy przez API DataFrame. Zmiana interfejsu nie wymaga zmiany silnika przetwarzania.

Jak uruchomić zapytanie SQL na danych w Apache Spark?

Apache Spark uruchamia zapytanie SQL przez sesję Spark, gdy dane są dostępne pod nazwą używaną w zapytaniu. SparkSession wprowadzono w Apache Spark 2.0.0 jako nowy punkt wejścia do pracy z danymi.6

  1. 1Sesja Spark stanowi punkt wejścia do odczytu…
  2. 2DataFrame przechowuje odczytane dane wraz ze schematem…
  3. 3Widok lub tabela nadaje danym nazwę używaną…
  4. 4Metoda spark.sql przyjmuje zapytanie, na przykład SELECT…
Schemat w skrócie — szczegóły każdego kroku poniżej · Opracowanie: Redakcja Systemy BI
  • Sesja Spark stanowi punkt wejścia do odczytu danych i wykonywania zapytań.
  • DataFrame przechowuje odczytane dane wraz ze schematem kolumn potrzebnych w zapytaniu.
  • Widok lub tabela nadaje danym nazwę używaną w klauzuli FROM.
  • Metoda spark.sql przyjmuje zapytanie, na przykład SELECT produkt, SUM(kwota) FROM sprzedaz GROUP BY produkt, i zwraca DataFrame.

Wynik zapytania można dalej filtrować, wyświetlić albo zapisać przez API DataFrame. Wywołana bez argumentu metoda DataFrame.show() wyświetla domyślnie pierwszych 20 wierszy.7

Kiedy wybrać SQL, a kiedy API DataFrame lub Dataset?

Wybór interfejsu zależy od sposobu zapisania logiki i języka aplikacji. Typowany Dataset działa w dwóch językach, Javie i Scali. API DataFrame obejmuje cztery: Javę, Scalę, Pythona i R.3

Tabela porównuje interfejsy według sposobu pracy, zastosowania i ograniczeń.

InterfejsSposób pracyPrzydatny, gdyOgraniczenie – dla kogo nie
SQLTekst zapytaniaLogika obejmuje filtry, połączenia i agregacjeNie dla kodu wymagającego typowanych obiektów
API DataFrameMetody w kodzieAplikacja składa operacje programowoNie dla osób potrzebujących kontroli typów obiektów właściwej typowanemu Dataset
DatasetTypowane obiekty i operacjeAplikacja w Javie lub Scali pracuje na określonym typieNie dla aplikacji w Pythonie lub R wymagających tego typowanego API

SQL i API DataFrame można połączyć w jednym przepływie pracy. Zapytanie przygotowuje dane, a kod aplikacji przekształca jego wynik.

Jak znaleźć etapy zapytania, które spowalniają jego wykonanie?

Opóźnień szukaj w interfejsie monitorowania Spark. Porównaj czas wykonania etapów z odczytem danych i transferem między zadaniami. Etap obejmuje zestaw zadań, a shuffle oznacza przesyłanie między nimi danych, na przykład podczas grupowania. Interfejs monitorowania aplikacji Spark działa domyślnie na porcie 4040.8

  • Wykonane zapytanie znajdź w widoku zapytań SQL interfejsu monitorowania i otwórz jego szczegóły.
  • Etapy wykonania porównaj według czasu trwania, liczby rekordów oraz ilości odczytanych i przesłanych danych.
  • Rozkład pracy między zadaniami przejrzyj w najdłuższym etapie; znaczne różnice czasu mogą wskazywać na nierówny podział danych.
  • Operację źródłową powiąż z obciążonym etapem, aby ustalić, czy koszt powstaje przy odczycie, połączeniu czy agregacji.

Analizę zmian zacznij od najkosztowniejszego etapu, zamiast przebudowywać całe zapytanie naraz. W Spark UI porównaj dla tego etapu medianę i maksimum czasu wykonania zadań.9

Czym jest plan wykonania zapytania w Spark SQL?

Plan wykonania zapytania w Spark SQL opisuje operacje przygotowane przez silnik. Wskazuje źródła danych, miejsca filtrowania oraz sposób wykonania połączeń i agregacji. Plan logiczny przedstawia operacje na danych, a plan fizyczny sposób ich wykonania. EXPLAIN EXTENDED pokazuje cztery części: plan logiczny po parsowaniu, analizie i optymalizacji oraz plan fizyczny.10

W planie fizycznym można rozpoznać Scan, czyli odczyt danych, oraz Exchange, czyli ich wymianę między zadaniami. Plan pokazuje wybraną strategię, ale nie mierzy czasu; rzeczywiste obciążenie ocenisz w metrykach wykonanego zapytania. Od Apache Spark 3.2.0 adaptacyjne wykonywanie zapytań jest domyślnie włączone i może zmienić plan w trakcie pracy.11

Jak odczytać plan wykonania zapytania za pomocą EXPLAIN?

EXPLAIN wyświetla plan Spark SQL bez uruchamiania zapytania. Do przeglądu operatorów użyj składni EXPLAIN FORMATTED SELECT …. Wynik ma dwie sekcje: zarys planu fizycznego i szczegóły jego operatorów.10

  • Odczyt danych znajdź przy operatorze Scan i sprawdź objęte nim kolumny oraz filtry.
  • Połączenia i agregacje odszukaj w planie fizycznym, aby ustalić sposób wykonania operacji zapisanych w SQL.
  • Wymianę danych rozpoznaj po operatorze Exchange i powiąż ją z połączeniem lub grupowaniem, które jej wymaga.

Plan z EXPLAIN pokazuje zamierzone operacje. Ich rzeczywisty koszt widać dopiero w metrykach wykonania.

Możliwości i zastosowania zapytań SQL w Apache Spark

Spark SQL pomaga przygotować zestawienia z danych przetwarzanych w Apache Spark. Zapytaniem wybierzesz kolumny, odfiltrujesz rekordy, połączysz zbiory i obliczysz agregaty. Wynik może zasilać raport sprzedaży albo model danych używany w dashboardzie.

Zapytanie SQL określa oczekiwany wynik, nie ręczny sposób przetwarzania każdego rekordu. Analityk zapisuje w nim regułę raportową, oddzielając ją od kodu uruchamiającego zadanie.

Jakie możliwości oferuje Spark SQL?

Spark SQL obsługuje filtrowanie, grupowanie, sortowanie i łączenie danych. Funkcje okna obliczają wartości w obrębie grupy bez sprowadzania jej do jednego wiersza. Przydają się choćby do ustalenia kolejności transakcji klienta. Zapytanie może też tworzyć zestawienia według daty, produktu lub regionu.

Wynik pozostaje dostępny do dalszej obróbki. Można użyć go w kolejnym etapie analizy albo przygotować tabelę raportową. Schemat źródła ma przy tym znaczenie: nazwy i typy kolumn określają, które operacje da się poprawnie wykonać.12

Dlaczego użytkownicy wybierają Spark SQL?

Użytkownicy wybierają Spark SQL, gdy chcą zastosować znaną składnię SQL w zadaniu Apache Spark. Analityk może odczytać warunki filtrowania i agregacji bez śledzenia całego kodu aplikacji. Programista przekazuje potem wynik zapytania do dalszej pracy w tym samym zadaniu.

W raportowaniu takie rozwiązanie ułatwia czytanie definicji zestawienia osobom znającym SQL. Spark SQL pasuje do analiz, których reguły da się opisać operacjami na kolumnach i relacjach między zbiorami.

DataFrame i Dataset w praktyce: tworzenie danych i ograniczenia

DataFrame służy do pracy na nazwanych kolumnach. Dataset pozwala z kolei powiązać rekordy z typem obiektu w Javie lub Scali. Przy tworzeniu obu struktur określ znaczenie pojedynczego rekordu i typy jego pól. Poprawny schemat pozwoli odróżnić liczby od tekstu przed rozpoczęciem analizy.3

Kiedy Spark SQL nie sprawdza się najlepiej?

Spark SQL nie sprawdzi się jako interfejs do logiki, której nie da się czytelnie wyrazić operacjami na kolumnach i rekordach. Algorytm wymagający szczegółowego sterowania każdym obiektem wygodniej zapisać w kodzie aplikacji. Zadanie Spark nadal potrzebuje sesji i zasobów obliczeniowych. Sam wybór SQL nie usuwa więc kosztu przetwarzania danych.

Jak utworzyć Dataset w Apache Spark?

Dataset utworzysz w Javie lub Scali, przekazując rekordy i opis ich typu do sesji Spark. Przydaje się to programistom wykonującym typowane operacje na obiektach.

  • Typ rekordu zdefiniuj jako klasę lub inny obsługiwany typ, którego pola odpowiadają danym wejściowym.
  • Enkoder dobierz do typu rekordu; określa sposób przekształcania obiektów na reprezentację używaną przez Spark.
  • Metodę createDataset wywołaj na sesji Spark, przekazując rekordy i enkoder.

Utworzony Dataset pozwala wykonywać zarówno typowane operacje na rekordach, jak i operacje na kolumnach.

Jak przeprowadzić analizę danych na praktycznym przykładzie?

Analizę w Spark SQL zacznij od pytania, na które ma odpowiedzieć wynik. Potem wybierz kolumny potrzebne do filtrowania i agregacji. Zbiór użyty w przykładzie pracy ze Spark SQL ma 42 kolumny; ograniczenie się do potrzebnych pól ułatwia czytanie zapytania.13

  • Cel analizy zapisz jako miernik i wymiar, na przykład sumę wartości sprzedaży według produktu.
  • Dane wejściowe odczytaj do DataFrame i sprawdź nazwy oraz typy pól używanych w obliczeniu.
  • Regułę filtrowania zastosuj przed agregacją, jeśli raport ma obejmować tylko wybrane transakcje.
  • Wynik agregacji oceń pod kątem zgodności każdego wiersza z zamierzonym poziomem szczegółowości raportu.

Otrzymasz zestawienie, którego kolumny i poziom agregacji wynikają z pytania analitycznego.

Jak utworzyć DataFrame na podstawie własnych danych?

DataFrame utworzysz z własnych rekordów przez sesję Spark. Nadaj polom nazwy i typy zgodne z danymi, a przed użyciem zapytania skontroluj schemat.

  • Rekordy wejściowe przygotuj tak, aby każde pole miało spójne znaczenie we wszystkich rekordach.
  • Schemat danych określ jawnie, jeśli nie chcesz wyprowadzać typów automatycznie z wartości wejściowych.
  • Metodę createDataFrame wywołaj z danymi i odpowiednim schematem, po czym skontroluj kolumny oraz przykładowe wiersze.

DataFrame z poprawnym schematem jest gotowy do filtrowania, agregowania i dalszej pracy w Spark SQL.12

Biblioteki oraz operacje odczytu i modyfikacji danych

Spark SQL zapewnia DataFrame i zapytaniom SQL wspólny dostęp do Hive, Avro, Parquet, ORC, JSON i JDBC.1 Data Source API służy do odczytu i zapisu danych z różnych źródeł. Wybór źródła określa, skąd Spark pobiera rekordy i gdzie może zapisać wynik.

Jakie biblioteki służą do pracy z danymi w Apache Spark?

Apache Spark udostępnia API DataFrame do przygotowywania danych, a Spark SQL do zapisywania operacji jako zapytań. JDBC łączy aplikacje Java z bazą danych. ODBC obsługuje połączenia aplikacji z systemami danych przez odpowiedni sterownik. Spark SQL obsługuje oba rodzaje połączeń.1

Łącznik Apache Spark dla SQL Server i Azure SQL nie jest już konserwowany. Do nowych zadań zalecane jest wbudowane źródło JDBC w Apache Spark ze sterownikiem Microsoft JDBC Driver for SQL Server.14 Ten wybór dotyczy połączenia ze źródłem, nie składni zapytania analitycznego.

Jak odpytywać dane za pomocą SQL?

Spark SQL odpytuje dane udostępnione sesji Spark jako tabela lub widok. Osoba budująca zadanie przygotowuje zarówno źródło, jak i zapytanie.

  • Źródło danych odczytaj do DataFrame, dobierając metodę do miejsca przechowywania rekordów.
  • Tabelę lub widok wskaż jako źródło rekordów i użyj nazw kolumn zgodnych z jego schematem.
  • Zapytanie SELECT uruchom przez sesję Spark, określając kolumny, warunki filtrowania i ewentualną agregację.
  • Połączenie z narzędziem przez JDBC lub ODBC skonfiguruj według kierunku dostępu: odczyt bazy przez Spark wymaga źródła danych, a wysyłanie zapytań do Spark – usługi przyjmującej połączenia.

Wynik możesz dalej przekształcać jako DataFrame albo zapisać w miejscu docelowym.

Jak modyfikować lub aktualizować dane za pomocą SQL?

Spark SQL pozwala tworzyć lub zastępować dane wynikowe. Aktualizacja istniejących wierszy zależy jednak od typu tabeli i źródła. Przed zapisem ustal, czy zadanie ma dopisać rekordy, zastąpić tabelę, czy zmienić wybrane wiersze.

  • Dopisywanie danych zachowuje istniejące rekordy i dodaje wynik zadania do tabeli docelowej.
  • Nadpisywanie tabeli SQL Server wymaga uwagi przy niekonserwowanym łączniku Apache Spark: tryb overwrite usuwa tabelę, a bez opcji truncate również jej indeksy.14
  • Zbiorcze wstawianie przez ten łącznik używa domyślnie poziomu izolacji READ_COMMITTED, który określa zasady odczytu danych podczas transakcji.14
  • Aktualizacja wybranych wierszy wymaga tabeli obsługującej tę operację; sam widok nie daje możliwości trwałej zmiany danych źródłowych.

Przy zapisie rozróżnij dopisanie, nadpisanie i aktualizację. Zachowanie każdej z tych operacji zależy od użytego źródła danych.

Interpreter SQL i optymalizator zapytań

Interpreter SQL analizuje zapytanie i przekazuje je optymalizatorowi, który przygotowuje sposób wykonania operacji. Analiza obejmuje składnię oraz zgodność nazw kolumn i tabel ze schematem. Optymalizator Catalyst przekształca plan, a Spark wybiera operacje do wykonania.

Spark SQL korzysta z optymalizatora kosztowego, który porównuje szacowany koszt różnych sposobów wykonania. W optymalizacji pomagają też generowanie kodu i przechowywanie kolumnowe.1 Szacunek ułatwia wybór planu, ale nie mierzy czasu jego wykonania.

Catalyst można rozszerzać o reguły właściwe dla źródeł danych. Mogą one na przykład przenosić filtrowanie lub agregację do zewnętrznego systemu przechowywania.13 To, czy źródło wykona daną operację zamiast Spark, zależy od możliwości integracji. Rzeczywisty koszt wybranego planu pokażą metryki po uruchomieniu zapytania.

Integracja zapytań SQL z pozostałymi funkcjami Apache Spark

Spark SQL łączy zapytania z kodem Apache Spark. Wynik zapytania można dalej przetwarzać jako DataFrame, a dane przygotowane w kodzie udostępnić SQL. Reguły analityczne pozostają wtedy oddzielone od pozostałej logiki aplikacji.

Funkcja UDF, czyli User-Defined Function, jest funkcją użytkownika rozszerzającą operacje na kolumnach w zbiorach Dataset. Spark SQL pozwala definiować takie funkcje.1 UDF przydaje się, gdy potrzebnego przekształcenia nie da się czytelnie zapisać dostępnymi funkcjami SQL. Jeśli odpowiednia funkcja wbudowana istnieje, logikę można zachować bezpośrednio w zapytaniu.

Podział pracy wynika z zadania: zapytanie opisuje przekształcenia danych, a kod aplikacji obsługuje logikę wykraczającą poza SQL.

Wykonywanie zapytań SQL na dużą skalę

Spark SQL przetwarza duże zbiory, dzieląc pracę między zadania Apache Spark. Partycja to część danych przydzielona do przetworzenia przez zadanie. Skalowanie zależy od zasobów, podziału danych i operacji zawartych w zapytaniu.

Filtrowanie ogranicza liczbę rekordów potrzebnych w dalszych operacjach. Wybór kolumn zmniejsza z kolei zakres przetwarzanych danych. Połączenie zbiorów lub agregacja mogą wymagać ich przenoszenia między zadaniami. Jeśli część partycji zawiera znacznie więcej rekordów, przypisane im zadania kończą się później i opóźniają wynik.15

Przy dużej skali kontroluj zakres danych i równomierność pracy. Samo zwiększanie zasobów obliczeniowych nie zastąpi tej kontroli.15

Składnia Spark SQL, formaty danych i typowe błędy

Spark SQL wymaga zapytania zgodnego ze schematem danych i swoim dialektem SQL. Błędna nazwa kolumny, niezgodny typ lub nieobsługiwana składnia mogą uniemożliwić wykonanie operacji. Format pliku określa sposób odczytu rekordów, a schemat – interpretację ich pól.

Formaty różnią się organizacją danych. Tabela zestawia formaty wymienione w tej sekcji.

FormatSposób przechowywania danych
Parquet i ORCFormaty kolumnowe
JSON i AvroFormaty przechowujące rekordy w innych strukturach

Przy przenoszeniu zapytania między źródłami sprawdź typy pól, obsługę wartości pustych i zapis dat. Dopiero potem porównuj wyniki.

Jak odczytywać dane z plików Parquet i zapisywać wyniki?

Pliki Parquet odczytaj do DataFrame przez interfejs sesji Spark. Wynik zapytania zapiszesz przez interfejs zapisu DataFrame. Przed uruchomieniem zadania skontroluj schemat i tryb zapisu.

  • Ścieżkę wejściową przekaż metodzie odczytu Parquet, aby uzyskać DataFrame.
  • Schemat DataFrame skontroluj przed zapytaniem; nazwy i typy kolumn muszą odpowiadać użytym wyrażeniom.
  • Zapytanie analityczne wykonaj na danych udostępnionych SQL albo przekształć je metodami DataFrame.
  • Ścieżkę wynikową i tryb zapisu określ przed zapisaniem wyniku w Parquet; nadpisanie zastępuje dane we wskazanej lokalizacji.

Powstanie zbiór Parquet, który można ponownie odczytać do DataFrame.

W jakim stopniu składnia Spark SQL jest zgodna ze standardem SQL i innymi dialektami?

Spark SQL obsługuje typowe relacyjne konstrukcje SQL. Zgodność zapytania z innym dialektem nie gwarantuje jednak obsługi każdej funkcji, typu danych i polecenia modyfikującego. Przy przenoszeniu zapytania porównaj funkcje daty, rzutowanie typów i obsługę NULL, czyli wartości nieokreślonej. Osobno skontroluj zapis, bo dostępność tych operacji zależy również od rodzaju tabeli.

Błąd analizy zapytania odróżnij od błędu wykonania. Pierwszy może dotyczyć nazw lub typów kolumn; drugi ujawnia się czasem dopiero przy odczycie danych. Przeniesione zapytanie oceniaj po poprawności wyniku, nie tylko po zaakceptowaniu składni.16

Jak utworzyć widok tymczasowy z DataFrame i odpytać go w SQL?

Spark SQL może odpytać DataFrame po zarejestrowaniu go jako widok tymczasowy. Widok jest dostępny dla zapytań w danej sesji Spark. Po rejestracji uruchomisz zapytanie metodą spark.sql.1

  • DataFrame przygotuj przez odczyt danych lub utworzenie go z rekordów aplikacji.
  • Widok tymczasowy utwórz metodą createOrReplaceTempView(„sprzedaz”) wywołaną na przygotowanym DataFrame.
  • Zapytanie SQL wykonaj przez spark.sql(„SELECT produkt, SUM(kwota) AS wartosc FROM sprzedaz GROUP BY produkt”).
  • Wynikowy DataFrame wyświetl lub przekaż do dalszego przetwarzania.

Widok udostępnia dane zapytaniu, ale nie tworzy nowej tabeli na dysku.

Jak Apache Spark przetwarza duże zbiory danych?

Apache Spark przetwarza duże zbiory, rozdzielając obliczenia między procesy wykonawcze i łącząc wyniki. Driver koordynuje zadanie, a executory wykonują przydzieloną pracę i przechowują potrzebne dane. Operacje Spark SQL tworzą plan. Samo zdefiniowanie przekształcenia nie uruchamia jeszcze obliczeń.

  • Akcja, taka jak zapis lub wyświetlenie wyniku, uruchamia wykonanie przygotowanego planu.
  • Driver przydziela zadania executorom zgodnie z planem wykonania.
  • Executory odczytują przydzielone dane i wykonują na nich operacje zapytania.
  • Wynik trafia do miejsca wskazanego przez akcję, na przykład do plików wynikowych.

Rozproszone przetwarzanie pozwala Spark korzystać z dostępnych zasobów bez pobierania całego zbioru do procesu drivera.

Inne sposoby optymalizacji zadań w Apache Spark

Apache Spark pozwala zmieniać nie tylko zapytanie, lecz także format danych i sposób zapisu do bazy. Przy zapisie do SQL Server porównuj czas oraz wymagania dotyczące niezawodności. Krótszy czas nie oznacza takich samych właściwości trybów zapisu.

  • Przechowywanie kolumnowe układa wartości według kolumn; ma znaczenie przy analizie wybranych pól zamiast całych rekordów.
  • Tryb niezawodności łącznika określa zachowanie zapisu przy ponawianiu zadania; BEST_EFFORT i NO_DUPLICATES wybieraj według wymagań dotyczących duplikatów.
  • Opcja tabLock zmienia blokowanie tabeli podczas zapisu; oceń jej wpływ na równoczesną pracę innych procesów.

Opublikowane porównanie łączników SQL Server obejmowało plik store_sales z 143 997 590 wierszami. Podane czasy były średnią z 3 przebiegów.14 Źródło wskazuje też przewagę szybkości zapisu tego łącznika nad ogólnym JDBC sięgającą 15 razy. Nie gwarantuje to takiego czasu w innym zadaniu.14

Tabela pokazuje średnie czasy zapisu konfiguracji z opublikowanego porównania, od najkrótszego.

Konfiguracja zapisuŚredni czasOgraniczenie – dla kogo nie
sql-spark-connector, BEST_EFFORT, tabLock=true72 sekundyNie dla zadań wymagających trybu NO_DUPLICATES; trzeba ocenić wpływ blokady tabeli
sql-spark-connector, NO_DUPLICATES, tabLock=true198 sekundNie dla zapisu, w którym blokada tabeli koliduje z równoczesnymi operacjami
sql-spark-connector, BEST_EFFORT580 sekundNie dla zadań wymagających trybu NO_DUPLICATES
sql-spark-connector, NO_DUPLICATES709 sekundNie dla wyboru opartego wyłącznie na najkrótszym czasie w tym porównaniu
Ogólny łącznik JDBC, opcje domyślne1385 sekundNie dla wyboru opartego wyłącznie na najkrótszym czasie w tym porównaniu

Dane w tabeli: 14

Konfigurację dobierz najpierw do wymagań dotyczących duplikatów i dostępu do tabeli. Potem porównaj czas własnego zadania.

Uruchamianie lokalne i rozbudowa klastra Apache Spark

Apache Spark można uruchomić lokalnie podczas pracy nad zapytaniem albo w klastrze korzystającym z innych maszyn. Lokalny Spark SQL wymaga wskazania instalacji Javy przez PATH lub JAVA_HOME.1 W klastrze zasoby przydziela menedżer klastra, a procesy wykonawcze prowadzą obliczenia na przydzielonych maszynach.

Jak dodać węzły do klastra i połączyć je ze sobą?

Klaster Apache Spark rozbudujesz, dołączając maszyny robocze do używanego menedżera klastra. Nowe maszyny potrzebują łączności i dostępu do danych zadania. Przygotowuje je osoba administrująca klastrem.

  • Maszynę roboczą przygotuj z oprogramowaniem wymaganym przez konfigurację klastra.
  • Łączność sieciową skonfiguruj tak, aby menedżer klastra, maszyny robocze i aplikacja Spark mogły się komunikować.
  • Dostęp do danych zapewnij procesom na nowych maszynach; lokalna ścieżka na maszynie uruchamiającej aplikację nie wystarczy.
  • Nową maszynę zarejestruj zgodnie z konfiguracją menedżera klastra i skontroluj, czy otrzymuje zadania.

Dodatkowe zasoby pomogą dopiero wtedy, gdy nowe maszyny będą mogły odbierać zadania i odczytywać dane.

Tabele Hive: wykonywanie operacji i zapisywanie wyników

Spark SQL może odpytywać istniejące dane Hive oraz korzystać z jego tabel, zapytań i funkcji UDF. Obsługuje też niezmodyfikowane zapytania Hive uruchamiane na istniejących danych.1 Hive udostępnia metadane tabel, dzięki którym można odwoływać się do nich po nazwie.

Tabela Hive opisuje schemat i lokalizację danych. Sama nazwa nie określa jednak sposobu zapisu wyniku. SELECT zwraca dane do dalszej pracy; trwały wynik wymaga osobnego zapisu do tabeli lub wskazanej lokalizacji. Wcześniej dopasuj schemat wyniku do tabeli docelowej.

Istniejące definicje tabel Hive można wykorzystać w analizie. Zapis jej wyniku pozostaje osobną decyzją.

Interaktywna praca z powłoką Scala

Powłoka Scala pozwala interaktywnie uruchamiać kod Apache Spark i oglądać wyniki bez tworzenia osobnej aplikacji. Scala jest językiem, w którym można używać API DataFrame i przekazywać zapytania SQL do sesji Spark.

SparkSession jest dostępna w powłoce jako spark. W tej samej sesji użytkownik może odczytać dane do DataFrame, wykonać zapytanie i obejrzeć wynik. Wyświetlanie dużego wyniku nie zastępuje zapisu do miejsca docelowego. W powłoce służy przede wszystkim kontroli schematu i wybranych rekordów.

Powłoka Scala przydaje się podczas opracowywania zapytania. Powtarzalne zadanie wymaga utrwalenia kodu i sposobu uruchamiania.

Odczyt i zapis danych w Databricks

Databricks pozwala używać Spark SQL do odczytu tabel i zapisu wyników analiz w środowisku Apache Spark. Tabela udostępnia dane pod nazwą używaną w zapytaniu. Zapytanie odczytujące nie tworzy samo z siebie nowej tabeli wynikowej.

Odczyt wymaga tabeli dostępnej dla używanego środowiska obliczeniowego oraz uprawnień do jej odczytu. Przy zapisie trzeba wybrać tabelę docelową i zdecydować, czy dopisać dane, czy zastąpić istniejące. Przed nadpisaniem ustal, czy z tabeli korzystają inne zapytania lub raporty.

Praca w Databricks obejmuje wskazanie źródła, wykonanie zapytania i świadomy wybór sposobu zapisu wyniku.

Najczęściej zadawane pytania

W której wersji Apache Spark po raz pierwszy udostępniono Spark SQL?

Spark SQL po raz pierwszy udostępniono w Apache Spark 1.0.0.

Od której wersji SparkSession jest nowym punktem wejścia do pracy z danymi?

SparkSession wprowadzono jako nowy punkt wejścia w Apache Spark 2.0.0.

Czy zwykły widok tymczasowy jest dostępny w każdej sesji Spark?

Nie. Jest związany z sesją Spark, w której go utworzono.

Ile wierszy domyślnie wyświetla DataFrame.show() wywołane bez argumentów?

Domyślnie wyświetla pierwszych 20 wierszy.

Na jakim porcie domyślnie działa interfejs monitorowania aplikacji Spark?

Domyślnie działa na porcie 4040.

Czy adaptacyjne wykonywanie zapytań może zmienić plan w trakcie pracy?

Tak. Od Apache Spark 3.2.0 jest domyślnie włączone i może zmienić plan podczas wykonywania zapytania.

Czy łącznik Apache Spark dla SQL Server i Azure SQL jest nadal konserwowany?

Nie. Do nowych zadań zalecane jest wbudowane źródło JDBC w Apache Spark ze sterownikiem Microsoft JDBC Driver for SQL Server.

W których językach dostępne jest typowane API Dataset?

Typowane API Dataset jest dostępne w Javie i Scali.

Następny krok · Porównaj oferty w rankinguKursy SQL i analizy danych

Źródła

  1. ↑Spark SQL: Explained by ThirdEye Data https://thirdeyedata.ai/technologies/spark-sql
  2. ↑Apache Spark — Spark Release 1.0.0 https://spark.apache.org/releases/spark-release-1-0-0.html
  3. ↑Apache Spark, „Spark SQL and DataFrames” oraz „Getting Started”. ([spark.apache.org](spark.apache.org https://spark.apache.org/docs/latest/sql-programming-guide
  4. ↑Spark SQL: Relational Data Processing in Spark https://amplab.cs.berkeley.edu/wp-content/uploads/2015/03/SparkSQLSigmod2015.pdf
  5. ↑Apache Spark — DataFrame.createOrReplaceTempView https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrame.createOrReplaceTempView.html
  6. ↑Apache Spark — Spark Release 2.0.0 https://spark.apache.org/releases/spark-release-2-0-0.html
  7. ↑Apache Spark — DataFrame.show https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrame.show.html
  8. ↑Apache Spark — Web UI https://spark.apache.org/docs/4.2.0/web-ui.html
  9. ↑Apache Spark JIRA — SPARK-14037 https://issues.apache.org/jira/browse/SPARK-14037
  10. ↑Apache Spark — EXPLAIN https://spark.apache.org/docs/latest/sql-ref-syntax-qry-explain.html
  11. ↑Apache Spark — Performance Tuning https://spark.apache.org/docs/3.5.8/sql-performance-tuning.html
  12. ↑Apache Spark, „Getting Started” oraz „CREATE DATASOURCE TABLE”. ([spark.apache.org](spark.apache.org https://spark.apache.org/docs/latest/sql-getting-started.html
  13. ↑SQL at Scale with Apache Spark SQL and DataFrames — Concepts, Architecture and Examples https://medium.com/data-science/sql-at-scale-with-apache-spark-sql-and-dataframes-concepts-architecture-and-examples-c567853a702f
  14. ↑Łącznik Apache Spark dla programu SQL Server i usługi Azure SQL – Spark connector for SQL Server | Microsoft Learn https://learn.microsoft.com/pl-pl/sql/connect/spark/connector?view=sql-server-ver17
  15. ↑Apache Spark, „Getting Started” oraz „Performance Tuning”. ([spark.apache.org](spark.apache.org https://spark.apache.org/docs/latest/sql-performance-tuning.html
  16. ↑Apache Spark, „Error Conditions” oraz „Migration Guide: SQL, Datasets and DataFrame”. ([spark.apache.org](spark.apache.org https://spark.apache.org/docs/latest/sql-error-conditions.html