เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การ 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())
แก้ไขและรันโค้ด