Wprowadzenie do dołączenia w Spark SQL

Jak wiemy, sprzężenia w SQL są używane do łączenia danych lub wierszy z dwóch lub więcej tabel w oparciu o wspólne pole między nimi. W tym temacie dowiemy się o Dołącz w Spark SQL Dołącz w Spark SQL.

W Spark SQL, ramka danych lub zestaw danych to struktura tabelaryczna w pamięci, mająca wiersze i kolumny rozmieszczone w wielu węzłach. Podobnie jak normalne tabele SQL, możemy również wykonywać operacje łączenia na ramce danych lub zestawie danych obecnych w Spark SQL na podstawie wspólnego pola między nimi.

Istnieją różne rodzaje operacji łączenia dostępne w języku SQL. W zależności od przypadku zastosowania biznesowego wybieramy operację Dołącz. W poniższej sekcji przedstawimy przykład każdego rodzaju złączenia.

Rodzaje łączenia w Spark SQL

Poniżej przedstawiono różne typy połączeń dostępne w Spark SQL:

  • DOŁĄCZ DO WEWNĘTRZNEGO
  • KRZYŻ DOŁĄCZ
  • DOŁĄCZ DO LEWEGO ZEWNĘTRZNEGO
  • DOŁĄCZ DO PRAWEJ ZEWNĘTRZNEJ
  • DOŁĄCZ DO ZEWNĘTRZNEGO
  • POŁĄCZ LEWĄ SEMI
  • LEWY ANTY DOŁĄCZ

Przykład tworzenia danych

Wykorzystamy następujące dane, aby zademonstrować różne rodzaje złączeń:

Zestaw danych książki:

case class Book(book_name: String, cost: Int, writer_id:Int)
val bookDS = Seq(
Book("Scala", 400, 1),
Book("Spark", 500, 2),
Book("Kafka", 300, 3),
Book("Java", 350, 5)
).toDS()
bookDS.show()

Zestaw danych pisarza:

case class Writer(writer_name: String, writer_id:Int)
val writerDS = Seq(
Writer("Martin", 1),
Writer("Zaharia " 2),
Writer("Neha", 3),
Writer("James", 4)
).toDS()
writerDS.show()

Rodzaje połączeń

Poniżej wymieniono 7 różnych rodzajów połączeń:

1. DOŁĄCZ DO WEWNĘTRZNEGO

WEJŚCIE WEWNĘTRZNE zwraca zestaw danych, który ma wiersze, które mają pasujące wartości w obu zestawach danych, tj. Wartość wspólnego pola będzie taka sama.

val BookWriterInner = bookDS.join(writerDS, bookDS("writer_id") === writerDS("writer_id"), "inner")
BookWriterInner.show()

2. POŁĄCZENIE KRZYŻOWE

CROSS JOIN zwraca zestaw danych, który jest liczbą wierszy w pierwszym zestawie danych pomnożoną przez liczbę wierszy w drugim zestawie danych. Taki rodzaj wyniku nazywa się produktem kartezjańskim.
Warunek: do korzystania z połączenia krzyżowego parametr spark.sql.crossJoin.enabled musi mieć wartość true. W przeciwnym razie wyjątek zostanie zgłoszony.

spark.conf.set("spark.sql.crossJoin.enabled", true)
val BookWriterCross = bookDS.join(writerDS)
BookWriterCross.show()

3. DOŁĄCZ DO LEWEGO ZEWNĘTRZNEGO

POŁĄCZENIE W LEWO ZEWNĘTRZNE zwraca zestaw danych zawierający wszystkie wiersze z lewego zestawu danych i dopasowane wiersze z prawego zestawu danych.

val BookWriterLeft = bookDS.join(writerDS, bookDS("writer_id") === writerDS("writer_id"), "leftouter")
BookWriterLeft.show()

4. DOŁĄCZ DO PRAWEJ ZEWNĘTRZNEJ

DOŁĄCZ DO PRAWEJ ZEWNĘTRZNEJ zwraca zestaw danych, który zawiera wszystkie wiersze z prawego zestawu danych, i dopasowane wiersze z lewego zestawu danych.

val BookWriterRight = bookDS.join(writerDS, bookDS("writer_id") === writerDS("writer_id"), "rightouter")
BookWriterRight.show()

5. PEŁNE DOŁĄCZENIE ZEWNĘTRZNE

FULL OUTER JOIN zwraca zestaw danych, który ma wszystkie wiersze, gdy występuje dopasowanie w lewym lub prawym zestawie danych.

val BookWriterFull = bookDS.join(writerDS, bookDS("writer_id") === writerDS("writer_id"), "fullouter")
BookWriterFull.show()

6. LEWE POŁĄCZENIE SEMI

LEFT SEMI JOIN zwraca zestaw danych, który ma wszystkie wiersze z lewego zestawu danych, odpowiadające prawemu zestawowi danych. W przeciwieństwie do LEFT OUTER JOIN, zwrócony zestaw danych w LEFT SEMI JOIN zawiera tylko kolumny z lewego zestawu danych.

val BookWriterLeftSemi = bookDS.join(writerDS, bookDS("writer_id") === writerDS("writer_id"), "leftsemi")
BookWriterLeftSemi.show()

7. LEWE ANTY DOŁĄCZ

ANTI SEMI JOIN zwraca zestaw danych, który zawiera wszystkie wiersze z lewego zestawu danych, które nie mają zgodnego zestawu w prawym zestawie danych. Zawiera także tylko kolumny z lewego zestawu danych.

val BookWriterLeftAnti = bookDS.join(writerDS, bookDS("writer_id") === writerDS("writer_id"), "leftanti")
BookWriterLeftAnti.show()

Wniosek - Dołącz w Spark SQL

Łączenie danych jest jedną z najczęstszych i najważniejszych operacji służących realizacji naszego biznesowego przypadku użycia. Spark SQL obsługuje wszystkie podstawowe typy złączeń. Dołączając, musimy również wziąć pod uwagę wydajność, ponieważ mogą one wymagać dużych transferów sieciowych, a nawet tworzyć zestawy danych przekraczające nasze możliwości. W celu poprawy wydajności Spark używa optymalizatora SQL do ponownego zamawiania lub wypychania filtrów. Spark ogranicza także niebezpieczne połączenie i. e KRZYŻ DOŁĄCZ. Aby użyć łączenia krzyżowego, spark.sql.crossJoin.enabled musi być jawnie ustawiony na true.

Polecane artykuły

Jest to przewodnik dołączania do Spark SQL. W tym przykładzie omawiamy różne typy połączeń dostępne w Spark SQL z przykładem. Możesz także spojrzeć na następujący artykuł.

  1. Rodzaje złączeń w SQL
  2. Tabela w SQL
  3. Zapytanie wstawiania SQL
  4. Transakcje w SQL
  5. Filtry PHP | Jak sprawdzić poprawność danych wprowadzanych przez użytkownika za pomocą różnych filtrów?

Kategoria: