CommencezCommencez gratuitement

Détecter les mauvaises jointures

Les jointures peuvent mal tourner sans qu'on s'en rende compte si l'on n'y prend pas garde : elles ne lèveront pas d'erreur, mais renverront plutôt des données déformées, avec plus ou moins d'observations que prévu. Voyons quelques façons dont une jointure incorrecte peut détériorer votre ensemble de données.

Dans cet exemple, nous verrons ce qui se produit si vous joignez deux DataFrames lorsque les clés de jointure n'ont pas la même précision, puis nous comparerons le nombre d'enregistrements entre la bonne jointure et la mauvaise.

Cette activité fait partie du cours

Ingénierie des caractéristiques avec PySpark

Voir le cours

Instructions de l’exercice

  • Créez une jointure entre df_orig, le DataFrame avant la correction de sa précision, et walk_df qui fait correspondre longitude et latitude dans les DataFrames respectifs.
  • Comptez le nombre de valeurs manquantes avec where() et isNull() sur df['walkscore'] et correct_join['walkscore']. Vous devriez constater de nombreuses valeurs manquantes parce que nos types de données et notre précision ne concordent pas.
  • Créez une jointure entre df et walk_df qui ne fait correspondre que longitude.
  • Comptez le nombre d'enregistrements avec count() pour few_keys_df et correct_join_df. Vous devriez remarquer qu'il y en a beaucoup plus, car nous n'avons pas correctement restreint notre appariement.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

# Join on mismatched keys precision 
wrong_prec_cond = [____ == ____, ____ == ____]
wrong_prec_df = ____.join(____, on=wrong_prec_cond, how='left')

# Compare bad join to the correct one
print(wrong_prec_df.____(____.____()).count())
print(correct_join_df.____(____.____).count())

# Create a join on too few keys
few_keys_cond = [____ == ____]
few_keys_df = ____.join(____, on=few_keys_cond, how='left')

# Compare bad join to the correct one
print("Record Count of the Too Few Keys Join Example: " + str(____.____()))
print("Record Count of the Correct Join Example: " + str(____.____()))
Modifier et exécuter le code