Paris Data Eng — Octobre 2019


Jonathan WINANDY
univalence.io
Jonathan Winandy
• Co-Organisateur du Paris Data Eng
• Fondateur d’univalence.io “Data made simple”

-> Cabinet d’expertise en Data Engineering
• Conférencier dans le domaine de la Méga Data :
• Construction de Datalakes (spark-adabra)
• Accélération des cycles de développement (fast-spark)
• Qualité des données (centrifuge)
• …
UNIVALENCE: Data Sidekicks
3
Univalence : les acolytes de la
Data depuis 2015 !
Univalence.IO
• On améliore les activités de d’ingénierie de la donnée :
• Conseil
• Audit
• Blog
• Formation (Scala débutant/avancé, Kafka et Spark)
• Outils => SparkTools
Data made simple
Scala et Spark
• Objet
• FP
• Fonction f de A => B
• Complète

∀a ∈ A, f(a) ∈ B
• Déterministe

∀a ∈ A, f(a) == f(a)
• Sans effets de bord
• JVM + très bonne interop
• Composition de programmes
complexes
• Calcul distribué en
mémoire (+ disque)
• Interop avec les sources
de données
• Intégration avec les
orchestrateurs
• Architecture plus flexible
• Plus facile pour développer
• R / Python / Java / Scala
• ‘opencore’
• Aujourd’hui le projet ‘ParkaViz’ est privé !
• Mono Repo, Mono Branche
• https: //github.com/univalence/spark-tools/tree/master
• Pour :
• Scala 2.11 et 2.12
• Spark 2.0 à 2.4
• Intégration continue avec Circle-CI
• https: //circleci.com/gh/univalence/workflows/spark-tools
• Livraison sur bintray
• https: //bintray.com/univalence/univalence-jvm
Mono Repo + Mono Branch + Release Early
Chaque commit entraîne une
livraison des projets 

(si les tests passent)
0.3+130-4432b345
version+distance-hash
resolvers += "spark-test" at "http: //dl.bintray.com/univalence/univalence-jvm"
libraryDependencies += "io.univalence" %% "spark-test" % "0.3+79-4936e981" % Test
=> François : "SBT, monorepo et livraison"
Les projets
•Centrifuge => Parka
•Spark-Test
•Spark-ZIO
•Fenek
•Plumbus
Plumbus
• Un projet pour les expérimentations,
en particulier pour le blog.
• Eg :
• Le cogroup pour les dataframes en
Spark
• https: //github.com/univalence/
spark-tools/blob/master/plumbus/
src/main/scala/io/univalence/
plumbus/cogroup.scala
Spark-Test (1/2)
• Les tests avec Spark n’est pas si facile !
• Spark-Test permet de :
• Fournir une SparkSession (configurable)
• Créer facilement des dataframes
• Comparer les dataframes
• Rapidement
• En expliquant clairement les différences
Spark-Test (2/2)
class MyTestClass extends FunSuiteLike with SparkTest {
test("create df with json string") {
// create df from json string
val df = dfFromJsonString("{a:1}", "{a:2}")
}
}
val dfUT = Seq(1, 2, 3).toDF("id")
val dfExpected = Seq(2, 1, 4).toDF("id")
dfUT.assertEquals(dfExpected)
in value at id, 2 was not equal to 1
dataframe({id: 1})
dataframe({id: 2})
in value at id, 1 was not equal to 2
dataframe({id: 2})
dataframe({id: 1})
in value at id, 4 was not equal to 3
dataframe({id: 3})
dataframe({id: 4})
=> Harrison : "Tests Spark simples et efficaces avec Spark-Test"
Fenek (~alpha)
• Permet de modéliser des pipelines colonnes
par colonnes.
• Test des colonnes séparément.
• Meilleur gestion des “UDF”s.
Spark-ZIO
• Parce que l’API de Spark n’est pas (assez) pure !
• API plus propre
• Meilleur code pour les pipelines Spark
• Gestion de la SparkSession, du Load, du Write, …
• Permet d’améliorer la performance des petits pipelines.
• Mais aussi du ‘retry’, ‘recover’, ‘scheduling’, …
• A venir, gestion des appels “REST” au milieu d’un job
spark.
=> Phil : "Apprivoiser Spark avec ZIO"
Centrifuge -> Parka
• Outils de gestion de la qualité des données :
• Ligne à ligne
• Globale (DeltaQA)
->
Parka / DeltaQA
• Calcul d'indicateurs pour les tests de non-régression.
• Peut-on comparer f’ (la nouvelle transformation) et f
pour s’assurer que f’ est meilleure ?
f f’
Update
À la main ?
1. On prend un échantillon S
2. On map avec f => R
3. On map avec f’ => R’
4. ???
5. Profit !
Avec Parka
Feuille de route
• Parka
• Meilleures analyses
• Données imbriquées
• …
• ParkaViz as a Service (gratuit ?)
• Intégration des projets encore dans les cartons
• Ex. SchemaUtils
• Avoir des contributeurs externes à Univalence
Une question ?


jonathan@univalence.io

Spark tools by Jonathan Winandy

  • 1.
    Paris Data Eng— Octobre 2019 
 Jonathan WINANDY univalence.io
  • 2.
    Jonathan Winandy • Co-Organisateurdu Paris Data Eng • Fondateur d’univalence.io “Data made simple”
 -> Cabinet d’expertise en Data Engineering • Conférencier dans le domaine de la Méga Data : • Construction de Datalakes (spark-adabra) • Accélération des cycles de développement (fast-spark) • Qualité des données (centrifuge) • …
  • 3.
    UNIVALENCE: Data Sidekicks 3 Univalence: les acolytes de la Data depuis 2015 !
  • 4.
    Univalence.IO • On amélioreles activités de d’ingénierie de la donnée : • Conseil • Audit • Blog • Formation (Scala débutant/avancé, Kafka et Spark) • Outils => SparkTools Data made simple
  • 5.
    Scala et Spark •Objet • FP • Fonction f de A => B • Complète
 ∀a ∈ A, f(a) ∈ B • Déterministe
 ∀a ∈ A, f(a) == f(a) • Sans effets de bord • JVM + très bonne interop • Composition de programmes complexes • Calcul distribué en mémoire (+ disque) • Interop avec les sources de données • Intégration avec les orchestrateurs • Architecture plus flexible • Plus facile pour développer • R / Python / Java / Scala
  • 6.
    • ‘opencore’ • Aujourd’huile projet ‘ParkaViz’ est privé ! • Mono Repo, Mono Branche • https: //github.com/univalence/spark-tools/tree/master • Pour : • Scala 2.11 et 2.12 • Spark 2.0 à 2.4 • Intégration continue avec Circle-CI • https: //circleci.com/gh/univalence/workflows/spark-tools • Livraison sur bintray • https: //bintray.com/univalence/univalence-jvm
  • 7.
    Mono Repo +Mono Branch + Release Early Chaque commit entraîne une livraison des projets 
 (si les tests passent) 0.3+130-4432b345 version+distance-hash resolvers += "spark-test" at "http: //dl.bintray.com/univalence/univalence-jvm" libraryDependencies += "io.univalence" %% "spark-test" % "0.3+79-4936e981" % Test => François : "SBT, monorepo et livraison"
  • 8.
    Les projets •Centrifuge =>Parka •Spark-Test •Spark-ZIO •Fenek •Plumbus
  • 9.
    Plumbus • Un projetpour les expérimentations, en particulier pour le blog. • Eg : • Le cogroup pour les dataframes en Spark • https: //github.com/univalence/ spark-tools/blob/master/plumbus/ src/main/scala/io/univalence/ plumbus/cogroup.scala
  • 10.
    Spark-Test (1/2) • Lestests avec Spark n’est pas si facile ! • Spark-Test permet de : • Fournir une SparkSession (configurable) • Créer facilement des dataframes • Comparer les dataframes • Rapidement • En expliquant clairement les différences
  • 11.
    Spark-Test (2/2) class MyTestClassextends FunSuiteLike with SparkTest { test("create df with json string") { // create df from json string val df = dfFromJsonString("{a:1}", "{a:2}") } } val dfUT = Seq(1, 2, 3).toDF("id") val dfExpected = Seq(2, 1, 4).toDF("id") dfUT.assertEquals(dfExpected) in value at id, 2 was not equal to 1 dataframe({id: 1}) dataframe({id: 2}) in value at id, 1 was not equal to 2 dataframe({id: 2}) dataframe({id: 1}) in value at id, 4 was not equal to 3 dataframe({id: 3}) dataframe({id: 4}) => Harrison : "Tests Spark simples et efficaces avec Spark-Test"
  • 12.
    Fenek (~alpha) • Permetde modéliser des pipelines colonnes par colonnes. • Test des colonnes séparément. • Meilleur gestion des “UDF”s.
  • 13.
    Spark-ZIO • Parce quel’API de Spark n’est pas (assez) pure ! • API plus propre • Meilleur code pour les pipelines Spark • Gestion de la SparkSession, du Load, du Write, … • Permet d’améliorer la performance des petits pipelines. • Mais aussi du ‘retry’, ‘recover’, ‘scheduling’, … • A venir, gestion des appels “REST” au milieu d’un job spark. => Phil : "Apprivoiser Spark avec ZIO"
  • 14.
    Centrifuge -> Parka •Outils de gestion de la qualité des données : • Ligne à ligne • Globale (DeltaQA) ->
  • 15.
    Parka / DeltaQA •Calcul d'indicateurs pour les tests de non-régression. • Peut-on comparer f’ (la nouvelle transformation) et f pour s’assurer que f’ est meilleure ? f f’ Update
  • 16.
    À la main? 1. On prend un échantillon S 2. On map avec f => R 3. On map avec f’ => R’ 4. ??? 5. Profit !
  • 17.
  • 18.
    Feuille de route •Parka • Meilleures analyses • Données imbriquées • … • ParkaViz as a Service (gratuit ?) • Intégration des projets encore dans les cartons • Ex. SchemaUtils • Avoir des contributeurs externes à Univalence
  • 19.