Una unión peligrosa
En este ejercicio, uniremos por latitud y longitud para incorporar otro conjunto de datos que mide lo amigable que es un barrio para caminar. Debemos tener cuidado de que las columnas de unión tengan el mismo tipo de datos y de unir con la misma precisión (número de cifras después del decimal), ¡o la unión no funcionará!
A continuación verás que df['latitude'] y df['longitude'] tienen mayor precisión que walk_df['longitude'] y walk_df['latitude']. Necesitamos redondearlas a la misma precisión para que la unión funcione correctamente.
Este ejercicio forma parte del curso
Ingeniería de características con PySpark
Instrucciones del ejercicio
- Convierte
walk_df['latitude']ywalk_df['longitude']al tipo double usandocast('double')sobre la columna y reemplazándola in situ conwithColumn(). - Redondea las columnas in situ con
withColumn()yround('latitude', 5)yround('longitude', 5). - Crea la condición de unión haciendo coincidir
walk_df['latitude']condf['latitude']ywalk_df['longitude']condf['longitude']. - Une
dfywalk_dfconjoin(), usando la condición anterior y el tipo de uniónleft. Guarda el dataframe resultante comojoin_df.
ejercicio interactivo práctico
Prueba este ejercicio completando este código de ejemplo.
# 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())