Ein riskanter Join
In dieser Übung verknüpfen wir über Latitude und Longitude, um einen weiteren Datensatz hinzuzufügen, der misst, wie fußgängerfreundlich ein Viertel ist. Dabei müssen wir darauf achten, dass die Join-Spalten denselben Datentyp haben und mit derselben Genauigkeit (Anzahl der Nachkommastellen) verglichen werden – sonst funktioniert der Join nicht!
Unten siehst du, dass df['latitude'] und df['longitude'] eine höhere Genauigkeit haben als walk_df['longitude'] und walk_df['latitude']. Wir müssen sie auf dieselbe Genauigkeit runden, damit der Join korrekt funktioniert.
Diese Übung ist Teil des Kurses
<Kurs>Feature Engineering mit PySpark</Kurs>Übungsanweisungen
- Wandle
walk_df['latitude']undwalk_df['longitude']in den Typ double um, indem ducast('double')auf die Spalte anwendest und die Spalte mitwithColumn()direkt ersetzt. - Runde die Spalten mit
withColumn()sowieround('latitude', 5)undround('longitude', 5)in place. - Erstelle die Join-Bedingung, dass
walk_df['latitude']zudf['latitude']passt undwalk_df['longitude']zudf['longitude']passt. - Führe
dfundwalk_dfmitjoin()zusammen, verwende die oben definierte Bedingung und den Join-Typleft. Speichere das Ergebnis-DataFrame alsjoin_df.
Interaktive praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
# 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())