Небезпечне зʼєднання
У цій вправі ми зʼєднуватимемо за широтою та довготою, щоб додати інший набір даних, який вимірює зручність пішого руху в районі. Потрібно бути уважними: стовпці для зʼєднання мають бути одного типу даних, а також мати однакову точність (кількість цифр після коми), інакше зʼєднання не спрацює!
Нижче ви побачите, що df['latitude'] і df['longitude'] мають вищу точність, ніж walk_df['longitude'] і walk_df['latitude']. Потрібно округлити їх до однакової точності, щоб зʼєднання відбулося коректно.
Ця вправа є частиною курсу
Опрацювання ознак у PySpark
Інструкції до вправи
- Перетворіть
walk_df['latitude']іwalk_df['longitude']на тип double, застосувавши до стовпцяcast('double')і замінивши стовпець на місці за допомогоюwithColumn(). - Округліть стовпці на місці за допомогою
withColumn()і викликівround('latitude', 5)таround('longitude', 5). - Створіть умову зʼєднання: відповідність
walk_df['latitude']доdf['latitude']таwalk_df['longitude']доdf['longitude']. - Зʼєднайте
dfіwalk_dfза допомогоюjoin(), використовуючи умову вище та тип зʼєднанняleft. Збережіть результат у датафрейміjoin_df.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
# 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())