Uma junção perigosa
Neste exercício, vamos fazer uma junção por latitude e longitude para trazer outro conjunto de dados que mede o quão caminhável é um bairro. Precisamos ter cuidado para garantir que as colunas usadas na junção sejam do mesmo tipo de dado e que estejamos juntando com a mesma precisão (número de casas decimais), caso contrário a junção não vai funcionar!
Abaixo, você verá que df['latitude'] e df['longitude'] têm uma precisão maior do que walk_df['longitude'] e walk_df['latitude']. Vamos precisar arredondá-las para a mesma precisão para que a junção funcione corretamente.
Este exercício faz parte do curso
Feature Engineering com PySpark
Instruções do exercício
- Converta
walk_df['latitude']ewalk_df['longitude']para o tipo double usandocast('double')na coluna e substituindo a coluna no lugar comwithColumn(). - Arredonde as colunas no lugar com
withColumn()eround('latitude', 5)eround('longitude', 5). - Crie a condição de junção onde
walk_df['latitude']corresponde adf['latitude']ewalk_df['longitude']corresponde adf['longitude']. - Faça a junção de
dfewalk_dfcomjoin(), usando a condição acima e o tipo de junçãoleft. Salve o dataframe resultante comojoin_df.
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
# 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())