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()
Начини за създаване на рамка от данни
-
От съществуващите 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)
-
Чрез източници на данни
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
- printSchema () - За да видите структурата на схемата
file.printSchema()
// |-- AgePerPA: long (nullable = true)
// |-- FullName: string (nullable = true)
- select- Подобно на select statement в SQL, показва данните, както е споменато в оператора select.
file.select("FullName").show()
// +-------+
// | name|
// +-------+
// |Sam|
// |Jodi|
// | Bala|
// +-------+
- Filter - За да видите филтрираните данни от рамката от данни. Условието, споменато в командата
file.filter($"AgePerPA" > 18).show()
- GroupBy - За да групирате стойностите
file.groupBy("AgePerPA").count().show()
- show () - за показване на съдържанието на рамката от данни
file.show()
Ограничения
Въпреки че с dataframes можете да хванете sql синтаксична грешка по време на самото компилиране, той не е в състояние да обработва грешки, свързани с анализа, докато се изпълнява. Например, ако в кода се споменава несъществуващо име на колона, то няма да бъде забелязано до време на изпълнение. Това би довело до загуба на време и разходи за проекта на разработчика.
Заключение - Spark SQL Dataframe
Тази статия дава цялостна картина (необходимост, създаване, ограничения) за API на Dataframe на Spark SQL. Поради популярността на API-тата за рамки за данни Spark SQL остава една от широко използваните библиотеки. Точно като RDD, той предлага функции като толерантност на грешките, мързелива оценка, обработка в паметта, заедно с някои допълнителни предимства. Тя може да бъде дефинирана като данни, разпределени в клъстера в таблична форма. По този начин рамката от данни ще има схема, свързана с нея и може да бъде създадена чрез множество източници чрез обект на сесия на искра.
Препоръчителни статии
Това е ръководство за Spark SQL Dataframe. Тук обсъждаме начините за създаване на рамка от данни с операциите и ограниченията на DataFrame. Можете също да разгледате следната статия, за да научите повече -
- Spark Shell Commands
- Курсори в SQL
- SQL ограничения
- База данни в SQL
- Видове съединения в Spark SQL (Примери)
- Ръководство за списъка на командите на Unix Shell