Spark SQL Dataframe

Файл от данни, подобен на RDD, представлява абстракция, предоставена за структурирани данни в Spark SQL библиотеката. Това е разпределено събиране на данни, което може да се счита за таблица в релационна база данни с приложена схема. Тя може да бъде определена и като колекция от именани колони. Spark SQL е една от наличните библиотеки в стека Spark, която съдържа информация за структурата и изчисленията, които се извършват върху данните. Тази допълнителна информация се използва за извършване на оптимизации. Даден кадър включва предимствата на RDD заедно с техниките за оптимизация и този API е достъпен в Python, R, Scala и Java.

Различните източници, които генерират рамка от данни, са:

  • Съществуваща RDD
  • Структурирани файлове и бази данни
  • Столове за кошери

Необходимост от Dataframe

Искровата общност винаги се е опитвала да внесе структура в данните, където искрата SQL-рамки за данни са стъпките, предприети в тази посока. Първоначалният API на искра, RDD е за неструктурирани данни, където изчисленията и данните са непрозрачни. По този начин възникна изискване за създаване на API, който е в състояние да осигури допълнителни предимства на оптимизацията. По-долу са няколко изискванията, които са в основата на

  • Обработете структурирани и полу-данни
  • Множество източници на данни
  • Интеграция с множество езици за програмиране
  • Броят операции, които могат да бъдат извършени върху данните като select & filter.

Как да създадете Spark SQL Dataframe?

Преди да разберете начините за създаване на рамка за данни е важно да разберете друга концепция, чрез която искратните приложения създават рамка от данни от различни източници. Тази концепция е известна като искрица и е входна точка за цялата функционалност на искрата. По-рано трябваше да създаваме sparkConf, sparkContext или sqlContext поотделно, но с sparksession, всички се капсулират в рамките на една сесия, където искрата действа като обект на spsession.

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

Начини за създаване на рамка от данни

  1. От съществуващите RDD

Има два начина, по които Dataframe може да бъде създаден чрез RDD. Единият начин е използването на отражение, което автоматично извежда схемата на данните, а другият подход е да се създаде схема програмно и след това да се приложи към RDD.

  • Чрез наместване на схемата

Лесен начин за преобразуване на RDD в Dataframe е, когато той съдържа класове на случаите поради SQL интерфейса на Spark. Аргументите, предадени на класовете случай, се извличат с помощта на размисъл и той се превръща в името на колоните на таблицата. Последователности и масиви също могат да бъдат определени в класове на случаите. RDD, който ще бъде създаден с помощта на класа случай, може да бъде имплицитно преобразуван в Dataframe с помощта на метода 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()

Създава се превозно средство с рамка за данни и може да бъде регистрирано като таблица, срещу която могат да се изпълняват sql оператори.

  • Чрез програмно уточняване на схемата

Може да има случаи, в които предварително не сме запознати със схемата или сценарии, при които класовете на случаи не могат да заемат повече от 22 полета. В такива условия използваме подхода за програмно създаване на схемата. Първо, RDD от редове се създава от оригиналния RDD, т.е. преобразува rdd обекта от rdd (t) в rdd (ред). След това създайте схема, използвайки обекти StructType (таблица) и StructField (поле). Тази схема се прилага към RDD на редове, използвайки метода createDataFrame, който наподобява структурата на rdd (ред), създаден по-рано.

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. Чрез източници на данни

Spark позволява създаването на рамки за данни чрез множество източници като кошер, json, паркет, csv и текстови файлове, които също могат да се използват за създаване на рамки за данни.

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

Операции с DataFrame

Тъй като данните се съхраняват в табличен формат заедно със схемата, има редица операции, които могат да бъдат извършени върху рамките с данни. Той позволява множество операции, които могат да се извършват върху данни в рамки от данни.

Помислете файл е рамка от данни, която е създадена от csv файл с две колони - FullName и AgePerPA

  1. printSchema () - За да видите структурата на схемата

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

  1. select- Подобно на select statement в SQL, показва данните, както е споменато в оператора select.

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

  1. Filter - За да видите филтрираните данни от рамката от данни. Условието, споменато в командата

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

  1. GroupBy - За да групирате стойностите

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

  1. show () - за показване на съдържанието на рамката от данни

file.show()

Ограничения

Въпреки че с dataframes можете да хванете sql синтаксична грешка по време на самото компилиране, той не е в състояние да обработва грешки, свързани с анализа, докато се изпълнява. Например, ако в кода се споменава несъществуващо име на колона, то няма да бъде забелязано до време на изпълнение. Това би довело до загуба на време и разходи за проекта на разработчика.

Заключение - Spark SQL Dataframe

Тази статия дава цялостна картина (необходимост, създаване, ограничения) за API на Dataframe на Spark SQL. Поради популярността на API-тата за рамки за данни Spark SQL остава една от широко използваните библиотеки. Точно като RDD, той предлага функции като толерантност на грешките, мързелива оценка, обработка в паметта, заедно с някои допълнителни предимства. Тя може да бъде дефинирана като данни, разпределени в клъстера в таблична форма. По този начин рамката от данни ще има схема, свързана с нея и може да бъде създадена чрез множество източници чрез обект на сесия на искра.

Препоръчителни статии

Това е ръководство за Spark SQL Dataframe. Тук обсъждаме начините за създаване на рамка от данни с операциите и ограниченията на DataFrame. Можете също да разгледате следната статия, за да научите повече -

  1. Spark Shell Commands
  2. Курсори в SQL
  3. SQL ограничения
  4. База данни в SQL
  5. Видове съединения в Spark SQL (Примери)
  6. Ръководство за списъка на командите на Unix Shell

Категория: