Partitionnement et traitement paresseux

Nettoyer des données avec PySpark

Mike Metzger

Data Engineering Consultant

Partitionnement

  • Les DataFrames sont découpés en partitions
  • La taille des partitions peut varier
  • Chaque partition est traitée indépendamment
Nettoyer des données avec PySpark

Traitement paresseux

  • Les transformations sont paresseuses
    • .withColumn(...)
    • .select(...)
  • Rien n'est exécuté avant une action
    • .count()
    • .write(...)
  • Les transformations peuvent être réordonnées pour de meilleures performances
  • Peut parfois produire des comportements inattendus
Nettoyer des données avec PySpark

Ajout d'ID

Champs d'ID classiques :

  • Courants dans les bases relationnelles
  • Généralement un entier croissant, séquentiel et unique
  • Peu adaptés au parallélisme
id nom prénom état
0 Smith John TX
1 Wilson A. IL
2 Adams Wendy OR
Nettoyer des données avec PySpark

ID croissants monotones

pyspark.sql.functions.monotonically_increasing_id()

  • Entier 64 bits, croissant, unique
  • Pas forcément séquentiel (il peut y avoir des trous)
  • Totalement parallélisable
id nom prénom état
0 Smith John TX
134520871 Wilson A. IL
675824594 Adams Wendy OR
Nettoyer des données avec PySpark

Notes

Souvenez-vous : Spark est paresseux !

  • Parfois hors ordre
  • Lors d'une jointure, l'ID peut être attribué après la jointure
  • Testez vos transformations
Nettoyer des données avec PySpark

Passons à la pratique !

Nettoyer des données avec PySpark

Preparing Video For Download...