Introdução ao Spark Dataset

Dataset é uma estrutura de dados no Spark SQL que fornece segurança do tipo em tempo de compilação, a interface orientada a objetos e a otimização do Spark SQL.

Conceitualmente, é uma estrutura tabular na memória com linhas e colunas distribuídas por vários nós, como o Dataframe.

É uma extensão do Dataframe. A principal diferença entre o conjunto de dados e o DataFrame é que os conjuntos de dados são fortemente tipados.

(Conjunto de dados) = (Dataframe + segurança do tipo tempo de compilação)

O conjunto de dados foi lançado no Spark 1.6 como uma API experimental. O Dataframe e o Conjunto de dados são unificados na versão Spark 2.0 e o Dataframe se torna um alias para o Conjunto de dados (linha).

Dataframe = Conjunto de Dados (Linha)

Por que precisamos do Spark Dataset?

Para entender claramente o conjunto de dados, precisamos começar com um pouco da história da faísca e de sua evolução.

RDD é o núcleo do Spark. Inspirado no SQL e para facilitar as coisas, o Dataframe foi criado na parte superior do RDD. Dataframe é equivalente a uma tabela em um banco de dados relacional ou a um DataFrame em Python.

O RDD fornece segurança do tipo em tempo de compilação, mas não há otimização automática no RDD.

O Dataframe fornece otimização automática, mas não possui segurança do tipo em tempo de compilação.

O conjunto de dados é adicionado como uma extensão do Dataframe. O conjunto de dados combina os recursos do RDD (segurança do tipo compilação) e do Dataframe (otimização automática do Spark SQL).

(RDD (Spark 1.0)) -> (Dataframe (Spark1.3)) -> (Conjunto de dados (Spark1.6))

Como o Dataset possui segurança em tempo de compilação, portanto, ele é suportado apenas em uma linguagem compilada (Java e Scala), mas não em uma linguagem interpretada (R & Python). Mas a API Spark Dataframe está disponível em todos os quatro idiomas (Java, Scala, Python e R) suportados pelo Spark.

Idioma suportado pelo SparkAPI DataframeAPI do conjunto de dados
Linguagem compilada (Java e Scala)SIMSIM
Linguagem Interpretada (R & Python)SIMNÃO

Como criar um conjunto de dados Spark?

Existem várias maneiras de criar o conjunto de dados com base no caso de usuário

1. Primeiro crie o SparkSession

O SparkSession é um ponto de entrada único para um aplicativo spark que permite interagir com a funcionalidade subjacente do Spark e programar o Spark com as APIs DataFrame e Dataset.

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

  • Para criar um conjunto de dados usando a estrutura básica de dados, como Intervalo, Sequência, Lista, etc:

Usando o intervalo

Usando sequência

Usando a lista

  • Para criar um conjunto de dados usando a sequência de classes de caso chamando o método .toDS ():

  • Para criar um conjunto de dados do RDD usando .toDS ():

  • Para criar o conjunto de dados do Dataframe usando Case Class:

  • Para criar o conjunto de dados do Dataframe usando Tuplas:

2. Operações no conjunto de dados Spark

  1. Exemplo de contagem de palavras

  1. Conversão Spark Dataset para Dataframe

Também podemos converter o Spark Dataset em Datafame e utilizar APIs do Dataframe como abaixo:

Recursos do conjunto de dados Spark

  1. Tipo Segurança

O conjunto de dados fornece segurança do tipo em tempo de compilação. Isso significa que a sintaxe, bem como os erros de análise do aplicativo, serão verificados no momento da compilação antes de serem executados.

  1. Imutabilidade

O conjunto de dados também é imutável como RDD e Dataframe. Isso significa que não podemos alterar o conjunto de dados criado. Sempre que um novo conjunto de dados é criado, quando qualquer transformação é aplicada ao conjunto de dados.

  1. Esquema

Conjunto de dados é uma estrutura tabular na memória que possui linhas e colunas nomeadas.

  1. Desempenho e Otimização

Como o Dataframe, o conjunto de dados também usa o Catalyst Optimization para gerar um plano de consulta lógica e física otimizado.

  1. Linguagem de programação

A API do conjunto de dados está presente apenas em Java e Scala, que são linguagens compiladas, mas não em Python, que é uma linguagem interpretada.

  1. Avaliação preguiçosa

Como RDD e Dataframe, o conjunto de dados também realiza a avaliação lenta. Isso significa que o cálculo acontece apenas quando a ação é executada. O Spark faz apenas planos durante a fase de transformação.

  1. Serialização e coleta de lixo

O conjunto de dados Spark não usa serializadores padrão (serialização Kryo ou Java). Em vez disso, ele usa os codificadores rápidos de memória do Tungsten, que entendem a estrutura interna dos dados e podem transformar objetos de forma eficiente em armazenamento binário interno. Ele usa serialização de dados fora da pilha usando o codificador Tungsten e, portanto, não há necessidade de coleta de lixo.

Conclusão

O conjunto de dados é o melhor do RDD e do Dataframe. O RDD fornece segurança do tipo em tempo de compilação, mas não há otimização automática. O Dataframe fornece otimização automática, mas não possui segurança do tipo em tempo de compilação. O conjunto de dados fornece segurança do tipo em tempo de compilação e otimização automática. Portanto, o conjunto de dados é a melhor opção para desenvolvedores Spark usando Java ou Scala.

Artigos recomendados

Este é um guia para o Spark Dataset. Aqui discutimos como criar um conjunto de dados Spark de várias maneiras com exemplos e recursos. Você também pode consultar os seguintes artigos para saber mais -

  1. Comandos do Spark Shell
  2. Perguntas da entrevista do Spark
  3. Carreira no Spark
  4. Spark Streaming
  5. Diferentes operações relacionadas a Tuplas
  6. Dataframe do SQL Spark
  7. Tipos de junções no Spark SQL (exemplos)
  8. Guia para a lista de comandos do Unix Shell
  9. Os 6 principais componentes do Spark

Categoria: