危険な結合
この演習では、緯度(Latitude)と経度(Longitude)で結合して、地域の歩きやすさを測る別のデータセットを取り込みます。結合に使う列のデータ型が同じであること、そして同じ精度(小数点以下の桁数)で結合していることを必ず確認しましょう。そうしないと結合はうまくいきません!
以下では、df['latitude'] と df['longitude'] の精度が walk_df['longitude'] と walk_df['latitude'] より高いことがわかります。結合を正しく行うため、同じ精度に丸める必要があります。
この演習はコースの一部です
PySparkで学ぶ特徴量エンジニアリング
演習の手順
withColumn()で列を置き換えながら、walk_df['latitude']とwalk_df['longitude']をcast('double')を使って double 型に変換します。withColumn()とround('latitude', 5)、round('longitude', 5)を用いて、これらの列をその場で丸めます。walk_df['latitude']がdf['latitude']に一致し、walk_df['longitude']がdf['longitude']に一致するという結合条件を作成します。- 上記の条件と
left結合タイプを使ってjoin()で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())