En riskfylld join
I den här övningen ska vi joina på latitud och longitud för att hämta in en annan datamängd som mäter hur gångvänlig ett område är. Vi behöver se till att kolumnerna vi joinar på har samma datatyp och samma precision (antal decimaler), annars kommer joinen inte att fungera!
Nedan ser du att df['latitude'] och df['longitude'] har högre precision än walk_df['longitude'] och walk_df['latitude']. Vi behöver avrunda dem till samma precision för att joinen ska fungera korrekt.
Den här övningen är en del av kursen
Feature Engineering med PySpark
Övningsinstruktioner
- Konvertera
walk_df['latitude']ochwalk_df['longitude']till typen double medcast('double')på kolumnen och ersätt kolumnen på plats medwithColumn(). - Avrunda kolumnerna på plats med
withColumn()ochround('latitude', 5)respektiveround('longitude', 5). - Skapa joinvillkoret så att
walk_df['latitude']matchardf['latitude']ochwalk_df['longitude']matchardf['longitude']. - Joina
dfochwalk_dfmedjoin(), använd villkoret ovan och jointypenleft. Spara den joinade dataramen somjoin_df.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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())