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

Способы создания датафрейма

  1. Из существующих 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)

  1. Через источники данных

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

  1. printSchema () - для просмотра структуры схемы

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

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

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

  1. Фильтр - для просмотра отфильтрованных данных из кадра данных. Условие, указанное в команде

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

  1. GroupBy - группировать значения

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

  1. show () - для отображения содержимого фрейма данных

file.show()

Ограничения

Хотя с фреймами данных вы можете обнаружить синтаксическую ошибку sql во время самой компиляции, она не способна обрабатывать любые ошибки, связанные с анализом, до времени выполнения. Например, если в коде упоминается несуществующее имя столбца, оно не будет замечено до времени выполнения. Это приведет к потере времени разработчика и стоимости проекта.

Вывод - Spark SQL Dataframe

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

Рекомендуемые статьи

Это руководство по Spark SQL Dataframe. Здесь мы обсудим способы создания фрейма данных с помощью операций и ограничений. Вы также можете посмотреть следующую статью, чтобы узнать больше -

  1. Команды Spark Shell
  2. Курсоры в SQL
  3. Ограничения SQL
  4. База данных в SQL
  5. Типы объединений в Spark SQL (примеры)
  6. Руководство по списку команд оболочки Unix