7 conseils pour démarrer avec Spark

Nastasia Saby

@saby_nastasia

Zenika

Data

Data

Transformation

LavaJug      -      Nastasia Saby @saby_nastasia      -     Zenika

Utilisateurs Films Quand
Samantha Dans ses yeux 22/12 à 1h
Renzo The Island 22/12 à 12h
Renzo Parvarna 23/12 à 18h
Nils Aquaman 24/12 à 20h

LavaJug      -      Nastasia Saby @saby_nastasia      -     Zenika

Nos utilisateurs sont-ils plutôt des addicts, des occasionnels, des noctambules, etc ?

10 millions d'utilisateurs tous les jours

Travail sur machine 1

Travail sur machine 2

Travail sur machine 3

SPARK

LavaJug      -      Nastasia Saby @saby_nastasia      -     Zenika

1. utilise le spark-shell

2. Fais bien la différence entre les transformations et les actions

3. Apprends les bases de Scala

4. Apprends et désapprends les RDDs

5. Replonge-toi dans du SQL

6. Ne cherche pas à tout faire avec les udfs

LavaJug      -      Nastasia Saby @saby_nastasia      -     Zenika

price color
236 Red
344 Yellow
price color code
236 Red R236
344 Yellow Y344

LavaJug      -      Nastasia Saby @saby_nastasia      -     Zenika

def createCode = {
    //Pur scala code
}

//Enregistrer dans Spark la fonction "createCode"
//L'appeler

LavaJug      -      Nastasia Saby @saby_nastasia      -     Zenika

LavaJug      -      Nastasia Saby @saby_nastasia      -     Zenika

 

Etre aussi simple que possible

Être pur

Tests

LavaJug      -      Nastasia Saby @saby_nastasia      -     Zenika

Performance

 

=> Eviter les UDFs

LavaJug      -      Nastasia Saby @saby_nastasia      -     Zenika

Spark SQL built in functions combinaisons

LavaJug      -      Nastasia Saby @saby_nastasia      -     Zenika

7. Ouvre ton esprit pour tester avec spark

case class Diamond(cut: String, price: Int)
val diamonds = spark.read.csv("diamonds.csv").
as[Diamond]

LavaJug      -      Nastasia Saby @saby_nastasia      -     Zenika

val diamonds: Dataset[Diamond] = ...

diamonds.map(diamond => {
    diamond.price
})

LavaJug      -      Nastasia Saby @saby_nastasia      -     Zenika

val diamonds: Dataset[Diamond] = ...

def selectPrice(diamond: Diamond) = {
    diamond.price
} 
diamonds.map(selectPrice)

LavaJug      -      Nastasia Saby @saby_nastasia      -     Zenika

color price
Vert 1200
Rouge 700

Diamonds

color score
Vert 7
Rouge 4

TrendyColors

LavaJug      -      Nastasia Saby @saby_nastasia      -     Zenika

case class Result(price: Int)

LavaJug      -      Nastasia Saby @saby_nastasia      -     Zenika

1) Joindre les 2 objets => DataFrame

LavaJug      -      Nastasia Saby @saby_nastasia      -     Zenika

2) Filtrer pour avoir les éléments les plus tendances ( >5) => DataFrame

LavaJug      -      Nastasia Saby @saby_nastasia      -     Zenika

3) Sélectionner le prix => Dataset[Result]

LavaJug      -      Nastasia Saby @saby_nastasia      -     Zenika

def priceOfDiamondsWithTrendyColors(
        diamonds: ..., 
        trendyColors: ...,
        spark: SparkSession
    ) = {

    import spark.implicits._
    
    //Jointure des diamants et couleurs tendances
    //Filtrage des éléments les plus tendances
    //Sélection du prix

    //Cast en Dataset de Result

}

LavaJug      -      Nastasia Saby @saby_nastasia      -     Zenika

trait SparkSessionTestWrapper {

  val spark: SparkSession = ...

}

LavaJug      -      Nastasia Saby @saby_nastasia      -     Zenika


"test" in {

 val result: DataFrame = priceOfDiamondsWithTrendyColors(
    diamonds, 
    trendyColors,
    spark
 )

 //Make test
}

LavaJug      -      Nastasia Saby @saby_nastasia      -     Zenika

result.collect must beEqualTo(expected)
result.count must beEqualTo(3)

LavaJug      -      Nastasia Saby @saby_nastasia      -     Zenika

result.collect must beEqualTo(expected)
// => Lance la jointure, le filtrage, la sélection

result.count must beEqualTo(3)
// => Lance la jointure, le filtrage, la sélection

LavaJug      -      Nastasia Saby @saby_nastasia      -     Zenika

val good: Array = result.collect

good must beEqualTo(expected)

good.size must beEqualTo(3)

LavaJug      -      Nastasia Saby @saby_nastasia      -     Zenika

val good: Array = result.collect
//=> Lance la jointure, le filtrage et la sélection

good must beEqualTo(expected)
//=> Utilise le résultat

good.size must beEqualTo(3)
//=> Utilise le résultat

LavaJug      -      Nastasia Saby @saby_nastasia      -     Zenika

MERCI

Des questions ?

Nastasia Saby

@saby_nastasia

Zenika

Made with Slides.com