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
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
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
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
Nastasia Saby
@saby_nastasia
Zenika