การ Join ที่ต้องระวัง
ในแบบฝึกหัดนี้ เราจะใช้ Latitude และ Longitude เป็นเงื่อนไขในการ Join เพื่อนำชุดข้อมูลอีกชุดหนึ่งที่วัดความเป็นมิตรต่อการเดินในแต่ละย่านเข้ามารวมกัน สิ่งสำคัญที่ต้องระวังคือคอลัมน์ที่ใช้ Join ต้องมีชนิดข้อมูลเหมือนกัน และต้องมีความละเอียด (จำนวนตำแหน่งหลังจุดทศนิยม) ที่ตรงกัน มิฉะนั้น การ Join จะไม่สำเร็จ
จากข้อมูลด้านล่าง จะเห็นว่า df['latitude'] และ df['longitude'] มีความละเอียดสูงกว่า walk_df['longitude'] และ walk_df['latitude'] จึงต้องปัดค่าให้มีความละเอียดเท่ากันก่อนที่การ Join จะทำงานได้ถูกต้อง
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Feature Engineering with PySpark
คำแนะนำการฝึกหัด
- แปลง
walk_df['latitude']และwalk_df['longitude']ให้เป็นชนิด double โดยใช้cast('double')บนคอลัมน์ แล้วอัปเดตคอลัมน์ในที่เดิมด้วยwithColumn() - ปัดค่าทศนิยมของคอลัมน์ในที่เดิมด้วย
withColumn()และround('latitude', 5)และround('longitude', 5) - สร้างเงื่อนไขการ Join โดยให้
walk_df['latitude']ตรงกับdf['latitude']และwalk_df['longitude']ตรงกับdf['longitude'] - Join
dfและwalk_dfเข้าด้วยกันด้วยjoin()โดยใช้เงื่อนไขข้างต้นและประเภท Join แบบleftแล้วบันทึก DataFrame ที่ได้เป็น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())