Spark SQL Dataframe
Фрейм данных, похожий на RDD, является абстракцией для структурированных данных в библиотеке Spark SQL. Это распределенный набор данных, который можно рассматривать как таблицу в реляционной базе данных с присоединенной схемой. Его также можно определить как коллекцию именованных столбцов. Spark SQL - это одна из библиотек, доступных в стеке Spark, которая содержит информацию о структуре и вычислениях, выполняемых с данными. Эта дополнительная информация используется для выполнения оптимизации. Фрейм данных включает в себя преимущества RDD наряду с методами оптимизации, и этот API доступен в Python, R, Scala и Java.
Различные источники, которые генерируют фрейм данных:
- Существующий СДР
- Структурированные файлы данных и базы данных
- Столы Улей
Нужна датафрейм
Сообщество spark всегда пыталось привнести структуру в данные, где SQL-фреймы SQL представляют собой шаги, предпринятые в этом направлении. Первоначальный API spark, RDD предназначен для неструктурированных данных, где вычисления и данные являются непрозрачными. Таким образом, было требование создать API, который мог бы обеспечить дополнительные преимущества оптимизации. Ниже приведены несколько требований, которые легли в основу
- Процесс структурированный и полуданные
- Несколько источников данных
- Интеграция с несколькими языками программирования
- Количество операций, которые могут быть выполнены с данными, такими как выбор и фильтрация.
Как создать Spark SQL Dataframe?
Прежде чем разбираться в способах создания фрейма данных, важно понять другую концепцию, с помощью которой приложения Spark создают фрейм данных из разных источников. Эта концепция известна как sparksession и является отправной точкой для всех функций искры. Ранее нам приходилось создавать sparkConf, sparkContext или sqlContext по отдельности, но с помощью sparksession все они заключаются в одну сессию, где spark действует как объект sparksession.
import org.apache.spark.sql.SparkSession
val spark = SparkSession
.builder()
.appName("SampleWork")
.config("config.option", "value")
.getOrCreate()
Способы создания датафрейма
-
Из существующих RDD
Существует два способа создания Dataframe с помощью RDD. Одним из способов является использование отражения, которое автоматически выводит схему данных, а другой подход заключается в программном создании схемы и последующем применении к СДР.
- Выводя схему
Простой способ преобразования RDD в Dataframe - это когда он содержит классы дел благодаря интерфейсу SQL Spark. Аргументы, передаваемые классам case, выбираются с использованием отражения, и оно становится именем столбцов таблицы. Последовательности и массивы также могут быть определены в классах case. СДР, который будет создан с использованием класса case, можно неявно преобразовать в 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 (row). Затем создайте схему, используя объекты StructType (Table) и StructField (Field). Эта схема применяется к СДР строк с помощью метода 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 позволяет создавать фреймы данных из нескольких источников, таких как hive, json, parquet, 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”)
Операции с фреймами данных
Поскольку данные хранятся в табличном формате вместе со схемой, существует ряд операций, которые можно выполнять с кадрами данных. Это позволяет выполнять несколько операций над данными в рамках данных.
Рассмотрим файл - это фрейм данных, который был создан из файла CSV с двумя столбцами - FullName и AgePerPA
- printSchema () - для просмотра структуры схемы
file.printSchema()
// |-- AgePerPA: long (nullable = true)
// |-- FullName: string (nullable = true)
- select- Подобно оператору select в SQL, демонстрирует данные, указанные в операторе select.
file.select("FullName").show()
// +-------+
// | name|
// +-------+
// |Sam|
// |Jodi|
// | Bala|
// +-------+
- Фильтр - для просмотра отфильтрованных данных из кадра данных. Условие, указанное в команде
file.filter($"AgePerPA" > 18).show()
- GroupBy - группировать значения
file.groupBy("AgePerPA").count().show()
- show () - для отображения содержимого фрейма данных
file.show()
Ограничения
Хотя с фреймами данных вы можете обнаружить синтаксическую ошибку sql во время самой компиляции, она не способна обрабатывать любые ошибки, связанные с анализом, до времени выполнения. Например, если в коде упоминается несуществующее имя столбца, оно не будет замечено до времени выполнения. Это приведет к потере времени разработчика и стоимости проекта.
Вывод - Spark SQL Dataframe
В этой статье дается общая картина (необходимость, создание, ограничения) об API-интерфейсе данных Spark SQL. В связи с популярностью API-интерфейсов для обработки данных Spark SQL остается одной из широко используемых библиотек. Как и RDD, он обеспечивает такие функции, как отказоустойчивость, отложенная оценка, обработка в памяти, а также некоторые дополнительные преимущества. Его можно определить как данные, распределенные по кластеру в табличной форме. Таким образом, фрейм данных будет иметь связанную с ним схему и может быть создан из нескольких источников через объект сеанса искры.
Рекомендуемые статьи
Это руководство по Spark SQL Dataframe. Здесь мы обсудим способы создания фрейма данных с помощью операций и ограничений. Вы также можете посмотреть следующую статью, чтобы узнать больше -
- Команды Spark Shell
- Курсоры в SQL
- Ограничения SQL
- База данных в SQL
- Типы объединений в Spark SQL (примеры)
- Руководство по списку команд оболочки Unix