Введение в набор данных Spark

Набор данных - это структура данных в Spark SQL, которая обеспечивает безопасность типов во время компиляции, объектно-ориентированный интерфейс, а также оптимизацию Spark SQL.

Концептуально это табличная структура в памяти, имеющая строки и столбцы, которые распределены по нескольким узлам, таким как Dataframe.

Это расширение Dataframe. Основное различие между Dataset и DataFrame заключается в том, что наборы данных строго типизированы.

(Набор данных) = (Фрейм данных + безопасность типа времени компиляции)

Набор данных был выпущен в Spark 1.6 в качестве экспериментального API. Как Dataframe, так и Dataset объединены в версии Spark 2.0, а Dataframe становится псевдонимом для Dataset (Row).

Фрейм данных = набор данных (строка)

Зачем нам нужен набор данных Spark?

Чтобы иметь четкое представление о наборе данных, мы должны начать с небольшой истории искры и ее эволюции.

СДР является ядром Spark. Вдохновленный SQL и облегчающий задачу, Dataframe был создан на вершине RDD. Dataframe эквивалентен таблице в реляционной базе данных или DataFrame в Python.

RDD обеспечивает безопасность типов во время компиляции, но в RDD отсутствует автоматическая оптимизация.

Dataframe обеспечивает автоматическую оптимизацию, но ему не хватает безопасности во время компиляции.

Набор данных добавляется как расширение Dataframe. Набор данных сочетает в себе функции как RDD (т.е. безопасность типов во время компиляции), так и Dataframe (то есть автоматическая оптимизация Spark SQL).

(СДР (Spark 1.0)) -> (Фрейм данных (Spark1.3)) -> (Набор данных (Spark1.6))

Поскольку Dataset обеспечивает безопасность во время компиляции, поэтому он поддерживается только на скомпилированном языке (Java & Scala), но не на интерпретируемом языке (R & Python). Но Spark Dataframe API доступен на всех четырех языках (Java, Scala, Python & R), поддерживаемых Spark.

Язык поддерживается SparkAPI DataframeAPI набора данных
Скомпилированный язык (Java & Scala)ДАДА
Интерпретированный язык (R & Python)ДАНЕТ

Как создать набор данных Spark?

Существует несколько способов создания набора данных на основе варианта использования

1. Сначала создайте SparkSession

SparkSession - это единственная точка входа в приложение Spark, которая позволяет взаимодействовать с основными функциями Spark и программировать Spark с помощью API-интерфейсов DataFrame и Dataset.

val spark = SparkSession
.builder()
.appName("SparkDatasetExample")
.enableHiveSupport()
.getOrCreate()

  • Чтобы создать набор данных с использованием базовой структуры данных, такой как Range, Sequence, List и т. Д .:

Используя Диапазон

Использование последовательности

Использование списка

  • Чтобы создать набор данных, используя последовательность классов case, вызвав метод .toDS ():

  • Чтобы создать набор данных из RDD с помощью .toDS ():

  • Чтобы создать набор данных из Dataframe с помощью Case Class:

  • Чтобы создать набор данных из Dataframe с помощью кортежей:

2. Операции с набором данных Spark

  1. Пример подсчета слов

  1. Конвертировать набор данных Spark в Dataframe

Мы также можем преобразовать Spark Dataset в Datafame и использовать API Dataframe, как показано ниже:

Особенности набора данных Spark

  1. Тип безопасности

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

  1. неизменность

Набор данных также неизменен, как RDD и Dataframe. Это означает, что мы не можем изменить созданный набор данных. Каждый раз, когда создается новый набор данных, когда любое преобразование применяется к набору данных.

  1. схема

Набор данных - это табличная структура в памяти, которая имеет строки и именованные столбцы.

  1. Производительность и оптимизация

Как и Dataframe, набор данных также использует Catalyst Optimization для генерации оптимизированного логического и физического плана запросов.

  1. Язык программирования

API набора данных присутствует только в Java и Scala, которые являются компилируемыми языками, но не в Python, который является интерпретируемым языком.

  1. Ленивая оценка

Подобно RDD и Dataframe, набор данных также выполняет ленивую оценку. Это означает, что вычисление происходит только при выполнении действия. Spark строит только планы на этапе трансформации.

  1. Сериализация и сборка мусора

Набор данных Spark не использует стандартные сериализаторы (сериализация Kryo или Java). Вместо этого он использует быстрые встроенные в память кодеры Tungsten, которые понимают внутреннюю структуру данных и могут эффективно преобразовывать объекты во внутреннее двоичное хранилище. Он использует сериализацию данных вне кучи с использованием вольфрамового кодера и, следовательно, нет необходимости в сборке мусора.

Вывод

Набор данных является лучшим из RDD и Dataframe. RDD обеспечивает безопасность типов во время компиляции, но отсутствует автоматическая оптимизация. Dataframe обеспечивает автоматическую оптимизацию, но ему не хватает безопасности во время компиляции. Набор данных обеспечивает как безопасность типов во время компиляции, так и автоматическую оптимизацию. Следовательно, набор данных является лучшим выбором для разработчиков Spark, использующих Java или Scala.

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

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

  1. Команды Spark Shell
  2. Спарк Интервью Вопросы
  3. Карьера в Искре
  4. Spark Streaming
  5. Различные операции, связанные с кортежами
  6. Spark SQL Dataframe
  7. Типы объединений в Spark SQL (примеры)
  8. Руководство по списку команд оболочки Unix
  9. Топ 6 компонентов искры