terça-feira, 2 de julho de 2019

Apache Spark com Scala: Manipulação do RDD Etapa 1


O RDD (Resilient Distributed Dataset) é uma coleção tolerante a falhas de elementos de dados que podem ser acessados de forma distribuída. Essas coleções de elementos são redimensionadas pelos nós do Cluster e podem efetuar operações de forma paralela, se tornando a estrutura básica no qual o Apache Spark usa para tratamento de dados.

Para execução do exercício abaixo é necessário a preparação do ambiente indicado neste post: https://slothbigdata.blogspot.com/2019/07/ambiente-para-rodar-o-spark-com-scala.html.

  • Para primeira etapa vamos criar uma classe do scala: WordFilter.scala
  • Segundo tópico vamos instanciar a configuração e uma sessão do Spark(SparkContext utilizado na versão 1.6 após a 2.0 é possível instanciar a sessão com o SparkSession)
       val sparkConf = new SparkConf().setAppName("Spark Pi").setMaster("local")
     val sc = new SparkContext(sparkConf)

  • Para ler o arquivo vamos utilizar o método do SparkContext denominado textFile e informar a localização do arquivo  "dados1_word_count.txt" baixado no post acima.
     val textFile = sc.textFile("C:\\diretorio\\ dados1_word_count.txt")

     Resultado: textFile 

  • Para separar as palavras utilizando o método flatMap passando um processo de split no parâmetro da função. O resultado será um RDD com Strings de palavras.
     val palavras = textFile.flatMap(line => line.split(" "))

     Resultado: palavras 

  • Para a próxima função do RDD utilizaremos um filtro para todas a palavras "camisa", assim na função devemos enviar um parâmetro boleano.
     val filtro = palavras.filter(palavra => palavra.equals("camisa"))

     Resultado: filtro 
     


Segue o código completo da aplicação:



import org.apache.spark.SparkConf

import org.apache.spark.SparkContext
import org.apache.spark.sql.{DataFrame, SparkSession}

object WordFilter {
 
  def main(args: Array[String]): Unit = {
 
    val sparkConf = new SparkConf().setAppName("Spark Pi").setMaster("local")
    val sc = new SparkContext(sparkConf)
   
    println("###Metodo textFile: RDD da leitura do dado do arquivo ##")
    val textFile = sc.textFile("C:\\diretorio\\ dados1_word_count.txt")        
    for(resultado <- textFile.collect()){
      println(resultado)
    }
       
    println("###Metodo flatMap: RDD no qual sera enviado um array das palavras##")
    val palavras = textFile.flatMap(line => line.split(" "))
    for(resultado <- palavras.collect()){
      println(resultado)
    }
   
    println("###Metodo filter: RDD filtrado (envio do parametro pelo booleano) ##")
    val filtro = palavras.filter(palavra => palavra.equals("camisa"))
    for(resultado <- filtro.collect()){
      println(resultado)
    }
  } 
}

Em caso de dúvidas ou sugestões, escreva nos comentários ou nos mande um email: slothbigdata@gmail.com.

Fonte: https://spark.apache.org/docs/latest/rdd-programming-guide.html

Nenhum comentário:

Postar um comentário