Une jointure à risque
Dans cet exercice, nous allons joindre sur la latitude et la longitude pour intégrer un autre jeu de données qui mesure à quel point un quartier est propice à la marche. Nous devons nous assurer que les colonnes de jointure sont du même type de données et qu'elles ont la même précision (le nombre de chiffres après la virgule), sinon la jointure ne fonctionnera pas !
Ci-dessous, vous verrez que df['latitude'] et df['longitude'] ont une précision plus élevée que walk_df['longitude'] et walk_df['latitude']. Nous devrons les arrondir à la même précision pour que la jointure fonctionne correctement.
Cette activité fait partie du cours
Ingénierie des caractéristiques avec PySpark
Instructions de l’exercice
- Convertissez
walk_df['latitude']etwalk_df['longitude']au type double en utilisantcast('double')sur la colonne et en la remplaçant sur place avecwithColumn(). - Arrondissez les colonnes sur place avec
withColumn()etround('latitude', 5)ainsi queround('longitude', 5). - Créez la condition de jointure où
walk_df['latitude']correspond àdf['latitude']etwalk_df['longitude']correspond àdf['longitude']. - Joignez
dfetwalk_dfavecjoin(), en utilisant la condition ci-dessus et le type de jointureleft. Enregistrez le DataFrame résultant sousjoin_df.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# Cast data types
walk_df = ____.withColumn('longitude', ____.cast('double'))
walk_df = ____.withColumn(____, ____.cast('double'))
# Round precision
df = df.withColumn('longitude', round(____, 5))
df = df.withColumn(____, round(____, 5))
# Create join condition
condition = [____ == ____, ____ == ____]
# Join the dataframes together
join_df = ____.join(____, on=____, how=____)
# Count non-null records from new field
print(join_df.where(~join_df['walkscore'].isNull()).count())