Une jointure délicate
Dans cet exercice, nous allons effectuer une jointure sur la latitude et la longitude pour ajouter un autre jeu de données qui mesure à quel point un quartier est agréable pour se déplacer à pied. Nous devons nous assurer que les colonnes de jointure ont le même type de données et la même précision (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.
Cet exercice fait partie du cours
<cours>Feature Engineering avec PySpark</cours>Instructions de l’exercice
- Convertissez
walk_df['latitude']etwalk_df['longitude']en type double en utilisantcast('double')sur la colonne et en remplaçant la colonne sur place avecwithColumn(). - Arrondissez les colonnes sur place avec
withColumn()etround('latitude', 5)etround('longitude', 5). - Créez la condition de jointure :
walk_df['latitude']correspondant àdf['latitude']etwalk_df['longitude']correspondant à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())