Apache Spark és un motor de processament de dades de codi obert que permet processar grans volums de dades de manera ràpida i eficient. Spark és conegut per la seva velocitat i facilitat d'ús, i és àmpliament utilitzat en aplicacions de big data. En aquest tema, aprendrem com utilitzar Spark amb Scala per processar dades.

Objectius del Tema

  • Entendre què és Apache Spark i les seves característiques principals.
  • Configurar un projecte Spark amb Scala.
  • Escriure i executar aplicacions Spark bàsiques.
  • Treballar amb RDDs (Resilient Distributed Datasets) i DataFrames.

  1. Què és Apache Spark?

Apache Spark és un motor de processament de dades distribuït que proporciona una interfície per a la programació de clústers complets amb paral·lelisme implícit i tolerància a fallades. Les seves característiques principals inclouen:

  • Velocitat: Spark pot processar dades a gran velocitat gràcies a la seva capacitat de mantenir dades en memòria.
  • Facilitat d'ús: Proporciona APIs senzilles en Scala, Java, Python i R.
  • Generalitat: Suporta una àmplia gamma de càrregues de treball, incloent-hi processament de lots, processament de fluxos, i aprenentatge automàtic.
  • Compatibilitat amb Hadoop: Pot funcionar independentment o en un clúster Hadoop.

  1. Configuració del Projecte Spark amb Scala

Requisits Previs

  • Java Development Kit (JDK) instal·lat.
  • Apache Spark descarregat i configurat.
  • SBT (Scala Build Tool) instal·lat.

Configuració del Projecte

  1. Crear un nou projecte SBT:

    sbt new scala/scala-seed.g8
    
  2. Afegir dependències de Spark al fitxer build.sbt:

    name := "SparkWithScala"
    
    version := "0.1"
    
    scalaVersion := "2.12.10"
    
    libraryDependencies ++= Seq(
      "org.apache.spark" %% "spark-core" % "3.1.2",
      "org.apache.spark" %% "spark-sql" % "3.1.2"
    )
    
  3. Compilar el projecte:

    sbt compile
    

  1. Escriure i Executar una Aplicació Spark Bàsica

Exemple: Comptar Paraules

  1. Crear un fitxer Scala: Crea un fitxer anomenat WordCount.scala dins del directori src/main/scala.

  2. Escriure el codi:

    import org.apache.spark.{SparkConf, SparkContext}
    
    object WordCount {
      def main(args: Array[String]): Unit = {
        val conf = new SparkConf().setAppName("WordCount").setMaster("local[*]")
        val sc = new SparkContext(conf)
    
        val textFile = sc.textFile("path/to/textfile.txt")
        val counts = textFile.flatMap(line => line.split(" "))
                             .map(word => (word, 1))
                             .reduceByKey(_ + _)
    
        counts.saveAsTextFile("path/to/output")
      }
    }
    
  3. Executar l'aplicació:

    sbt run
    

  1. Treballar amb RDDs i DataFrames

RDDs (Resilient Distributed Datasets)

RDDs són la unitat fonamental de dades en Spark. Són col·leccions distribuïdes d'objectes que es poden processar en paral·lel.

Exemple: Operacions amb RDDs

val data = sc.parallelize(Seq(1, 2, 3, 4, 5))
val result = data.map(_ * 2).collect()
result.foreach(println)

DataFrames

DataFrames són col·leccions distribuïdes de dades organitzades en columnes nominals, similars a les taules en bases de dades relacionals.

Exemple: Operacions amb DataFrames

import org.apache.spark.sql.SparkSession

val spark = SparkSession.builder.appName("DataFrameExample").getOrCreate()
val df = spark.read.json("path/to/jsonfile.json")

df.show()
df.printSchema()
df.select("name").show()
df.filter(df("age") > 21).show()
df.groupBy("age").count().show()

Exercicis Pràctics

Exercici 1: Comptar Paraules en un Fitxer de Text

  1. Escriu una aplicació Spark que llegeixi un fitxer de text i compti el nombre d'ocurrències de cada paraula.
  2. Guarda el resultat en un fitxer de sortida.

Exercici 2: Operacions amb DataFrames

  1. Crea un DataFrame a partir d'un fitxer JSON.
  2. Realitza operacions de selecció, filtratge i agrupació sobre el DataFrame.

Solucions

Solució a l'Exercici 1

import org.apache.spark.{SparkConf, SparkContext}

object WordCount {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("WordCount").setMaster("local[*]")
    val sc = new SparkContext(conf)

    val textFile = sc.textFile("path/to/textfile.txt")
    val counts = textFile.flatMap(line => line.split(" "))
                         .map(word => (word, 1))
                         .reduceByKey(_ + _)

    counts.saveAsTextFile("path/to/output")
  }
}

Solució a l'Exercici 2

import org.apache.spark.sql.SparkSession

object DataFrameExample {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder.appName("DataFrameExample").getOrCreate()
    val df = spark.read.json("path/to/jsonfile.json")

    df.show()
    df.printSchema()
    df.select("name").show()
    df.filter(df("age") > 21).show()
    df.groupBy("age").count().show()
  }
}

Resum

En aquest tema, hem après què és Apache Spark i com configurar un projecte Spark amb Scala. Hem escrit i executat una aplicació Spark bàsica per comptar paraules en un fitxer de text. També hem explorat com treballar amb RDDs i DataFrames, dues de les estructures de dades més importants en Spark. Finalment, hem proporcionat exercicis pràctics per reforçar els conceptes apresos.

© Copyright 2024. Tots els drets reservats