一个危险的连接
在本练习中,您将根据经纬度进行连接,以引入另一份用于衡量社区步行友好度的数据集。我们需要格外小心,确保用于连接的列数据类型一致,并且连接时的小数精度(小数点后的位数)一致,否则连接将无法生效!
下面可以看到,df['latitude'] 和 df['longitude'] 的精度高于 walk_df['longitude'] 和 walk_df['latitude']。我们需要把它们取到相同的精度,这样连接才能正确完成。
本练习是课程的一部分
使用 PySpark 进行特征工程
练习说明
- 使用
cast('double')将walk_df['latitude']和walk_df['longitude']转换为 double 类型,并用withColumn()原地替换列。 - 使用
withColumn()搭配round('latitude', 5)和round('longitude', 5)对列进行原地取整。 - 创建连接条件:
walk_df['latitude']匹配df['latitude'],且walk_df['longitude']匹配df['longitude']。 - 使用
join()按上述条件并采用left连接类型将df与walk_df连接起来。将连接后的数据框保存为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())