Introdução ao RDD no Spark

Um RDD que significa Conjunto de dados distribuídos resilientes é um dos conceitos mais importantes no Spark. É uma coleção de registros somente leitura que é particionada e distribuída pelos nós em um cluster. Ele pode ser transformado em outro RDD por meio de operações e, uma vez que um RDD é criado, ele não pode ser alterado, e um novo RDD será criado.

Um recurso importante pelo qual o Spark superou as limitações do Hadoop é via RDD, porque, em vez de replicar os dados, o RDD (Resilient Distributed Datasets) mantém os dados entre os nós em um cluster e recupera os dados com a ajuda do gráfico de linhagem. No Hadoop, os dados foram armazenados de forma redundante entre as máquinas que forneciam a propriedade de tolerância a falhas. Assim, um RDD é uma abstração fundamental fornecida pelo Spark para dados distribuídos e computação.

As diferentes maneiras de criar um RDD são

  • Carregando um conjunto de dados externo
  • Passando os dados pelo método Parallelize
  • Transformando um RDD existente

Vamos discutir cada um deles em detalhes, mas antes disso, precisamos configurar um shell de faísca, que é o programa de driver do spark. Neste artigo, incluímos as linhas de código no scala. Os RDDs podem ter qualquer tipo de objeto Python, Java ou Scala, incluindo classes definidas pelo usuário. Assim, abaixo estão as etapas a serem seguidas para iniciar o spark-shell.

Iniciando o Spark-Shell

Etapa 1: faça o download e descompacte o spark. Baixe a versão atual do spark no site oficial. Descompacte o arquivo baixado em qualquer local do seu sistema.

Etapa 2: Configurar Scala

  • Faça o download do scala de scala lang.org
  • Instalar scala
  • Defina a variável de ambiente SCALA_HOME e defina a variável PATH para o diretório bin do scala.

Etapa 3: Inicie o spark-shell. Abra o prompt de comando e navegue até a pasta bin do spark. Execute-spark-shell.

Diferentes maneiras de criar RDD

1. Carregando um conjunto de dados externo

O método textFile do SparkContext é usado para carregar os dados de qualquer fonte que, por sua vez, crie um RDD. O Spark suporta uma ampla variedade de fontes a partir das quais os dados podem ser extraídos, como Hadoop, HBase, Amazon S3, etc. Uma fonte de dados é um arquivo de texto que discutimos aqui. Além dos arquivos de texto, a API scala do spark também suporta outros formatos de dados, como wholeTextFiles, arquivo de sequência, Hadoop RDF e muitos mais.

Exemplo

val file = sc.textFile("/path/textFile.txt"") // relative path

A variável chamada file é um RDD, criado a partir de um arquivo de texto no sistema local. No spark-shell, o objeto de contexto do spark (sc) já foi criado e é usado para acessar o spark. TextFile é um método de uma classe org.apache.spark.SparkContext que lê um arquivo de texto do HDFS, um sistema de arquivos local ou qualquer URI do sistema de arquivos suportado pelo Hadoop e o retorna como um RDD de Strings. Portanto, a entrada para este método é um URI e particiona os dados entre os nós.

2. Passando os dados pelo método Parallelize

Outra maneira de criar RDDs é pegar uma coleção existente na memória e passá-la para paralelizar o método do SparkContext. Embora o aprendizado da faísca, essa maneira de criar RDDs seja bastante útil, pois podemos criar os RDDs no shell e executar operações também. É dificilmente usado fora de testes e protótipos, pois exige que todos os dados estejam disponíveis na máquina local. Um ponto importante sobre a paralelização é o número de partições em que a coleção é dividida. Podemos passar o número (partições) como um segundo parâmetro no método paralelizar e, se o número não for especificado, o Spark decidirá com base no cluster.

  • Sem várias partições:

val sample = sc.parallelize(Array(1, 2, 3, 4, 5))

  • Com várias partições:

val sample = sc.parallelize(List(1, 2, 3, 4, 5), 3)

3. Transformando um RDD existente

Existem dois tipos de operações que são executadas no RDD.

  1. Transformações
  2. Ações

Transformações são operações no RDD que resultam na criação de outro RDD, enquanto ações são as operações que retornam um valor final ao programa do driver ou gravam dados em um sistema de armazenamento externo. Mapa e filtro são algumas operações de transformação. Considere um exemplo de filtragem de algumas linhas de um arquivo de texto. Inicialmente, um RDD é criado carregando o arquivo de texto. Em seguida, aplicamos uma função de filtro que filtrará um conjunto de linhas do arquivo de texto. O resultado também será um RDD. A operação de filtro não altera o RDD de entrada existente. Em vez disso, ele retorna um ponteiro para um RDD inteiramente novo, que é o erro vermelho. Ainda podemos usar a entrada RDD para outros cálculos.

val inputRDD = sc.textFile("log.txt")val errorsRDD = inputRDD.filter(line => line.contains("error"))

O exemplo abaixo mostra o mesmo conceito de transformação para uma função de mapa. O resultado é o RDD que foi gerado devido à função Map. Na operação de mapa, a lógica será definida e essa lógica específica será aplicada a todos os elementos do conjunto de dados.

val inputRDD = sc.parallelize(List(10, 9, 8, 7, 6, 5))val resultRDD = inputRDD.map(y => y * y)println(resultRDD.collect().mkString(", "))

Pontos importantes a serem lembrados

  • Entre todas as estruturas disponíveis atualmente, o Apache spark é o mais recente e está ganhando popularidade devido a seus recursos exclusivos e abordagem simples. Elimina todas as desvantagens impostas pelo Hadoop, além de manter a propriedade de tolerância a falhas e escalabilidade do MapReduce. Para atingir esses objetivos, a plataforma Spark introduz o conceito de RDD.
  • Existem principalmente três maneiras pelas quais um RDD pode ser criado, onde a mais básica é quando carregamos o conjunto de dados.
  • O método paralelizar é amplamente apenas para fins de teste e aprendizado.
  • Uma operação de transformação resultaria em um RDD.

Artigos recomendados

Este foi um guia para RDD no Spark. Aqui também discutimos diferentes maneiras de criar RDD, como iniciar o Spark-Shell com pontos importantes. Você também pode ler nossos artigos para saber mais.

  1. O que é RDD?
  2. Como instalar o Spark
  3. Spark Streaming
  4. Spark DataFrame
  5. O que são os comandos Spark Shell?
  6. Guia para a lista de comandos do Unix Shell

Categoria: