Spark SQL Dataframe

Ramka danych podobna do RDD jest abstrakcją przewidzianą dla danych strukturalnych w bibliotece Spark SQL. Jest to rozproszony zbiór danych, który można uznać za tabelę w relacyjnej bazie danych z dołączonym schematem. Można go również zdefiniować jako zbiór nazwanych kolumn. Spark SQL jest jedną z bibliotek dostępnych w stosie Spark, która zawiera informacje o strukturze i obliczeniach wykonywanych na danych. Te dodatkowe informacje służą do przeprowadzania optymalizacji. Ramka danych zawiera zalety RDD wraz z technikami optymalizacji, a ten interfejs API jest dostępny w Pythonie, R, Scali i Javie.

Różne źródła generujące ramkę danych to:

  • Istniejące RDD
  • Pliki danych strukturalnych i bazy danych
  • Tabele ula

Potrzeba ramki danych

Społeczność Spark zawsze starała się uporządkować dane, a ramki danych Spark Spark to kroki podjęte w tym kierunku. Początkowy interfejs API iskry, RDD, przeznaczony jest do danych nieustrukturyzowanych, w których obliczenia i dane są nieprzejrzyste. W związku z tym konieczne było stworzenie interfejsu API, który byłby w stanie zapewnić dodatkowe korzyści optymalizacji. Poniżej znajduje się kilka wymagań, które stanowiły podstawę ramki danych

  • Przetwarzaj strukturyzowane i półdane
  • Wiele źródeł danych
  • Integracja z wieloma językami programowania
  • Liczba operacji, które można wykonać na danych, takich jak wybór i filtr.

Jak utworzyć ramkę danych Spark SQL?

Przed zrozumieniem sposobów tworzenia ramki danych ważne jest zrozumienie innej koncepcji, według której aplikacje Spark tworzą ramkę danych z różnych źródeł. Ta koncepcja nazywa się iskrzeniem i jest punktem wyjścia dla wszystkich funkcji iskier. Wcześniej musieliśmy utworzyć sparkConf, sparkContext lub sqlContext osobno, ale z iskrowaniem wszystkie są hermetyzowane w ramach jednej sesji, w której iskra działa jak obiekt iskrzenia.

import org.apache.spark.sql.SparkSession
val spark = SparkSession
.builder()
.appName("SampleWork")
.config("config.option", "value")
.getOrCreate()

Sposoby tworzenia ramki danych

  1. Z istniejących RDD

Istnieją dwa sposoby tworzenia ramki danych za pomocą RDD. Jednym ze sposobów jest użycie odbicia, które automatycznie wprowadza schemat danych, a drugim podejściem jest utworzenie schematu programowo, a następnie zastosowanie go do RDD.

  • Wnioskowanie o schemacie

Łatwym sposobem konwersji RDD na ramkę danych jest użycie klas przypadków ze względu na interfejs SQL Spark. Argumenty przekazywane do klas spraw są pobierane za pomocą refleksji i staje się nazwą kolumn tabeli. Sekwencje i tablice można również definiować w klasach przypadków. RDD, który zostanie utworzony przy użyciu klasy sprawy, można domyślnie przekonwertować na ramkę danych przy użyciu metody toDF ().

val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._
case class Transport(AutoName: String, year: Int)
val Vehicle = sc.textFile("//path//").map(_.split(", ")).map(p => Transport(p(0), p(1)).toDF()

Pojazd jest tworzony i można go zarejestrować jako tabelę, na podstawie której można wykonywać instrukcje SQL.

  • Poprzez programowe określenie schematu

Mogą zdarzyć się przypadki, w których nie znamy wcześniej schematu lub scenariusze, w których klasy przypadków nie mogą przyjąć więcej niż 22 pól. W takich warunkach stosujemy podejście polegające na programowym tworzeniu schematu. Najpierw RDD wierszy jest tworzony z oryginalnego RDD, tzn. Konwertuje obiekt rdd z rdd (t) na rdd (row). Następnie utwórz schemat za pomocą obiektów StructType (Table) i StructField (Field). Ten schemat jest stosowany do RDD wierszy za pomocą metody createDataFrame, która przypomina strukturę rdd (wiersz) utworzoną wcześniej.

val Vehicle = sc.textFile("//path")
import org.apache.spark.sql._
val schema = StructType(Array(StructField("AutoName", StringType, true), StructField("Year", IntegerType, true)))
scala> val rowRDD = vehicle.map(_.split(", ")).map(p => org.apache.spark.sql.Row(p(0), p(1).toInt))
val vehicleSchemaRDD = sqlContext.applySchema(rowRDD, schema)

  1. Poprzez źródła danych

Spark umożliwia tworzenie ramek danych z wielu źródeł, takich jak gałąź, json, parkiet, pliki CSV i tekstowe, których można również użyć do tworzenia ramek danych.

Val file=sqlContext.read.json(“path to the json file”)
Val file=sqlContext.read.csv(“path to the json file”)
Val file=sqlContext.read.text(“path to the json file”)
val hiveData = new org.apache.spark.sql.hive.HiveContext(sc)
val hiveDF = hiveData.sql(“select * from tablename”)

Operacje DataFrame

Ponieważ dane są przechowywane w formacie tabelarycznym wraz ze schematem, istnieje wiele operacji, które można wykonać na ramkach danych. Umożliwia wiele operacji, które można wykonać na danych w ramkach danych.

Rozważ plik to ramka danych, która została utworzona z pliku csv z dwiema kolumnami - FullName i AgePerPA

  1. printSchema () - Aby wyświetlić strukturę schematu

file.printSchema()
// |-- AgePerPA: long (nullable = true)
// |-- FullName: string (nullable = true)

  1. select- Podobnie do instrukcji select w SQL, pokazuje dane, jak wspomniano w instrukcji select.

file.select("FullName").show()
// +-------+
// | name|
// +-------+
// |Sam|
// |Jodi|
// | Bala|
// +-------+

  1. Filtruj - aby wyświetlić przefiltrowane dane ze ramki danych. Warunek wymieniony w poleceniu

file.filter($"AgePerPA" > 18).show()

  1. GroupBy - Aby pogrupować według wartości

file.groupBy("AgePerPA").count().show()

  1. show () - aby wyświetlić zawartość ramki danych

file.show()

Ograniczenia

Chociaż w przypadku ramek danych można wychwycić błąd składni SQL w samym czasie kompilacji, nie jest on w stanie obsłużyć żadnego błędu związanego z analizą do czasu wykonania. Na przykład, jeśli w kodzie odwoływana jest nieistniejąca nazwa kolumny, nie zostanie ona zauważona do czasu wykonania. Doprowadziłoby to do marnowania czasu dewelopera i kosztów projektu.

Wniosek - Spark SQL Dataframe

W tym artykule przedstawiono ogólny obraz (potrzeba, tworzenie, ograniczenia) interfejsu API ramki danych Spark SQL. Ze względu na popularność interfejsów API ramek danych Spark SQL pozostaje jedną z najczęściej używanych bibliotek. Podobnie jak RDD, zapewnia takie funkcje, jak odporność na uszkodzenia, leniwa ocena, przetwarzanie w pamięci oraz pewne dodatkowe korzyści. Można go zdefiniować jako dane rozproszone w klastrze w formie tabelarycznej. W ten sposób ramka danych będzie powiązana ze schematem i może być utworzona z wielu źródeł za pośrednictwem obiektu sesji Spark.

Polecane artykuły

Jest to przewodnik po Spark SQL Dataframe. Tutaj omawiamy sposoby tworzenia ramki danych za pomocą operacji i ograniczeń DataFrame. Możesz także spojrzeć na następujący artykuł, aby dowiedzieć się więcej -

  1. Polecenia Spark Shell
  2. Kursory w SQL
  3. Ograniczenia SQL
  4. Baza danych w SQL
  5. Rodzaje złączeń w Spark SQL (przykłady)
  6. Przewodnik po liście poleceń powłoki Unix

Kategoria: