Johdatus liittymiseen Spark SQL: ään

Kuten tiedämme, SQL: n liitoksia käytetään kahden tai useamman taulukon tietojen tai rivien yhdistämiseen niiden välisen yhteisen kentän perusteella. Tässä aiheesta aiomme oppia liittymään Spark SQL -palvelun jäseneksi Liity Spark SQL: ään.

Spark SQL: ssä Dataframe tai Dataset ovat muistissa oleva taulukkorakenne, jossa on rivejä ja sarakkeita, jotka on jaettu useille solmuille. Kuten normaalit SQL-taulukot, voimme myös suorittaa liittymisoperaatioita Spark SQL: ssä olevassa Dataframe- tai Dataset-tietokannassa niiden välisen yhteisen kentän perusteella.

SQL: ssä on saatavana erityyppisiä Join-toimintoja. Liiketoiminnan tapauksesta riippuen valitsemme Liity-toiminnon. Seuraavassa osassa esitellään esimerkkejä kunkin liittymisen tyypistä.

Tyypit Liity Spark SQL: ään

Seuraavassa on Spark SQL: n käytettävissä olevat erityyppiset liitännät:

  • SISÄINEN LIITTYMINEN
  • Ristiliittymä
  • VASEN ULKO-LIITTYMINEN
  • OIKEA ULKOINEN LIITTY
  • TÄYSIN ULKOINEN LIITTYVÄ
  • Vasen puoli liittyä
  • VASEN ANTI LIITTYMINEN

Esimerkki tietojen luomisesta

Käytämme seuraavia tietoja osoittaaksemme erityyppiset liittymiset:

Kirja-aineisto:

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()

Kirjoittajan tietojoukko:

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()

Tyypit liitokset

Alla mainitaan 7 erityyppistä liitosta:

1. SISÄINEN LIITTYMINEN

INNER JOIN palauttaa tietojoukon, jolla on rivit, joilla on vastaavat arvot molemmissa tietojoukkoissa, ts. Yhteisen kentän arvo on sama.

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

2. Ristiliittymä

CROSS JOIN palauttaa tietojoukon, joka on ensimmäisen tietojoukon rivien lukumäärä kerrottuna toisen tietojoukon rivien lukumäärällä. Tällaista tulosta kutsutaan Cartesian-tuotteeksi.
Edellytys: Ristiliitoksen käyttämistä varten spark.sql.crossJoin.enabled on asetettava true. Muutoin poikkeus heitetään.

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

3. VASEN ULKO-LIITTYMINEN

LEFT OUTER JOIN palauttaa tietojoukon, jossa on kaikki rivit vasemmasta aineistosta ja vastaavat rivit oikeasta.

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

4. OIKEA ULKOINEN LIITTYMINEN

RIGHT OUTER JOIN palauttaa tietojoukon, jossa on kaikki rivit oikealta ja vastaavat rivit vasemmalta.

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

5. TÄYSIN ULKOINEN LIITTYMINEN

FULL OUTER JOIN palauttaa tietojoukon, jolla on kaikki rivit, kun vasemmassa tai oikeassa tietojoukossa on vastaavuus.

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

6. Vasen puoli liittyä

LEFT SEMI JOIN palauttaa tietojoukon, jossa on kaikki vasemman tietojoukon rivit, joiden vastaavuus on oikeassa. Toisin kuin VASEMMALLA LIITTYMÄLLÄ, LEFT SEMI JOIN -sovelluksen palautettu tietojoukko sisältää vain vasemman aineiston sarakkeet.

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

7. VASEN ANTI-LIITTYMINEN

ANTI SEMI JOIN palauttaa tietojoukon, jolla on kaikki vasemman tietojoukon rivit, joilla ei ole vastaavia oikeassa aineistossa. Se sisältää myös vain vasemman aineiston sarakkeet.

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

Johtopäätös - Liity Spark SQL: ään

Tietojen yhdistäminen on yksi yleisimmistä ja tärkeimmistä toimista liiketoimintakäytäntömme täyttämisessä. Spark SQL tukee kaikkia perustavanlaatuisia liittymiä. Liittyessään meidän on myös harkittava suorituskykyä, koska ne saattavat edellyttää suuria verkonsiirtoja tai jopa luoda tietojoukkoja, jotka ylittävät kykymme käsitellä. Suorituskyvyn parantamiseksi Spark käyttää SQL-optimoijaa suodattimien tilaamiseen tai uudelleen laskemiseen. Kipinä rajoittaa myös vaarallista liittymistä i. e Ristiliittymä. Ristiliitoksen käyttämistä varten spark.sql.crossJoin.enabled on asetettava todelliseksi totta.

Suositellut artikkelit

Tämä on opas liittymiseen Spark SQL: ään. Tässä keskustellaan Spark SQL: n eri tyyppisistä liitännöistä esimerkin kanssa. Voit myös tarkastella seuraavaa artikkelia.

  1. SQL-liittymien tyypit
  2. Taulukko SQL: ssä
  3. SQL-lisäyskysely
  4. Tapahtumat SQL: ssä
  5. PHP-suodattimet | Kuinka vahvistaa käyttäjän syöttämät tiedot eri suodattimilla?

Luokka: