Je travaille quotidiennement avec PySpark dans Databricks. Mon travail en tant que Data Scientist m'oblige à traiter de grandes quantités de données dans de nombreux tableaux différents. C'est un travail difficile, à plusieurs reprises.
Autant que le Extraire, transformer et charger (ETL) le processus semble simple, je peux dire que ce n’est pas toujours comme ça. Lorsque nous travaillons avec le Big Data, une grande partie de notre réflexion doit changer pour deux raisons :
- Les quantités de données sont bien plus importantes que les ensembles de données classiques.
- Lorsque nous travaillons avec le calcul parallèle dans des clusters, nous devons tenir compte du fait que les données seront réparties entre de nombreux nœuds de travail pour effectuer une partie du travail, puis rassemblées dans leur ensemble. Et ce processus, bien souvent, peut devenir très long si la requête est trop complexe.
Sachant cela, nous devons apprendre à écrire des requêtes intelligentes pour le Big Data. Dans cet article, je vais montrer quelques-unes de mes fonctions préférées du module pyspark.sql.functions
visant à vous aider lors de votre Data Wrangling dans PySpark.
Passons maintenant au contenu de cet article.
Comme beaucoup d’autres langages, PySpark bénéficie des modules, où vous pouvez trouver de nombreuses fonctions prêtes à l’emploi pour les objectifs les plus différents. Voici celui que nous chargerons dans notre session :
from pyspark.sql import functions as F
Si vous voulez voir quelle est l'étendue de la liste des fonctions à l'intérieur pyspark.sql.functions
, va sur ce site internet, où se trouve la référence API. Gardez à l'esprit qu'il s'agit de la version 3.5.0. Certaines anciennes versions peuvent ne pas comporter toutes les fonctions que je vais montrer dans cet article.
Base de données
L'ensemble de données à utiliser comme exemple est le Diamantsde ggplot2, partagé sous Licence MIT.
# Point file path
path = '/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv'# Load Data
df = spark.read.csv(path, header=True, inferSchema= True)