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

การเก็บผลลัพธ์ระหว่างกลาง

อย่างที่เห็นในบทที่ 1 การคัดลอกข้อมูลระหว่าง R กับ Spark เป็นงานที่ใช้เวลานาก ดังนั้นการ collect ข้อมูลอย่างที่ทำในแบบฝึกหัดก่อนหน้า ควรทำเฉพาะเมื่อจำเป็นจริงๆ เท่านั้น

ตัวดำเนินการ pipe นั้นสะดวกมากสำหรับการเชื่อมคำสั่งจัดการข้อมูลต่อกัน แต่โดยทั่วไปแล้ว คงไม่สามารถทำการวิเคราะห์ทั้งหมดโดยเชื่อมทุกอย่างเข้าด้วยกันในครั้งเดียวได้ ตัวอย่างเช่น แนวทางต่อไปนี้เป็นสิ่งที่ไม่ควรทำ เพราะจะทำให้ดีบักโค้ดได้ยากมาก

final_results <- starting_data %>%
  # 743 steps piped together
  # ... %>%
  collect()

นี่จึงเป็นปัญหาที่ต้องแก้ไข กล่าวคือ จำเป็นต้องเก็บผลลัพธ์ของการคำนวณระหว่างกลาง แต่ก็ไม่อยากใช้ collect เพราะช้า ทางออกคือใช้ compute() เพื่อคำนวณผลลัพธ์ แต่เก็บไว้ใน data frame ชั่วคราวบน Spark โดย compute() รับอาร์กิวเมนต์สองตัว ได้แก่ tibble และชื่อตัวแปรสำหรับ Spark data frame ที่จะใช้เก็บผลลัพธ์

a_tibble %>%
  # some calculations %>%
  compute("intermediate_results")

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

แนะนำ Spark ด้วย sparklyr ใน R

ดูคอร์ส

คำแนะนำการฝึกหัด

มีการสร้าง Spark connection ไว้ให้แล้วในชื่อ spark_conn และกำหนด tibble ที่เชื่อมต่อกับเมทาดาทาของแทร็กที่เก็บไว้ใน Spark ไว้ล่วงหน้าในชื่อ track_metadata_tbl

  • กรองแถวของ track_metadata_tbl ที่ artist_familiarity มีค่ามากกว่า 0.8
  • คำนวณผลลัพธ์โดยใช้ compute()
    • เก็บผลลัพธ์ไว้ใน Spark data frame ชื่อ "familiar_artists"
    • กำหนดผลลัพธ์ให้กับ R tibble ชื่อ computed
  • ดูชุดข้อมูล Spark ที่มีอยู่โดยใช้ src_tbls()
  • แสดง class() ของ computed สังเกตว่าต่างจาก collect() ตรงที่ compute() คืนค่าเป็น remote tibble ข้อมูลยังคงถูกเก็บอยู่ใน Spark cluster

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

# track_metadata_tbl has been pre-defined
track_metadata_tbl

computed <- track_metadata_tbl %>%
  # Filter where artist familiarity is greater than 0.8
  ___ %>%
  # Compute the results
  ___

# See the available datasets
___

# Examine the class of the computed results
___
แก้ไขและรันโค้ด