การเปรียบเทียบ sdf_sort() กับ arrange()
ในบทนี้ คุณได้สำรวจฟังก์ชันการแปลงฟีเจอร์จาก MLlib ของ Spark ไปบ้างแล้ว sparklyr ยังเปิดให้เข้าถึงฟังก์ชันบางส่วนที่ใช้งาน Spark DataFrame API ด้วย
วิธีเรียงลำดับ tibble แบบ dplyr คือการใช้ arrange() นอกจากนี้ยังสามารถเรียงลำดับ tibble ผ่าน Spark DataFrame API ได้โดยใช้ sdf_sort() ฟังก์ชันนี้รับ character vector ของชื่อคอลัมน์ที่ต้องการเรียง และขณะนี้รองรับเฉพาะการเรียงจากน้อยไปมาก (ascending) เท่านั้น
ตัวอย่างเช่น หากต้องการเรียงตามคอลัมน์ x แล้วตาม y แล้วตาม z (กรณีที่ค่าซ้ำกัน) โค้ดด้านล่างแสดงการเปรียบเทียบแนวทางของ dplyr กับ Spark DataFrame
a_tibble %>%
arrange(x, y, z)
a_tibble %>%
sdf_sort(c("x", "y", "z"))
หากต้องการดูว่าวิธีใดเร็วกว่า ให้ลองใช้ทั้ง arrange() และ sdf_sort() แล้วจับเวลาการรันโค้ดโดยครอบไว้ใน microbenchmark() จากแพ็กเกจที่มีชื่อเดียวกัน
microbenchmark({
# your code
})
สามารถเรียนรู้เพิ่มเติมเกี่ยวกับการวัดประสิทธิภาพของโค้ดได้ในคอร์ส Writing Efficient R Code
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
แนะนำ Spark ด้วย sparklyr ใน R
คำแนะนำการฝึกหัด
Spark connection ถูกสร้างไว้ให้แล้วในชื่อ spark_conn และ tibble ที่เชื่อมกับข้อมูล track metadata ที่เก็บอยู่ใน Spark ถูกกำหนดไว้ล่วงหน้าในชื่อ track_metadata_tbl
- ใช้
microbenchmark()เพื่อเปรียบเทียบเวลาที่ใช้ในการดำเนินการต่อไปนี้- ใช้
arrange()เพื่อเรียงแถวของtrack_metadata_tblตามyear,artist_name,release, แล้วตามtitle - ดึงผลลัพธ์กลับมาด้วย
collect() - ทำแบบเดิมอีกครั้ง คราวนี้ใช้
sdf_sort()แทนarrange()อย่าลืมใส่เครื่องหมายคำพูดครอบชื่อคอลัมน์
- ใช้
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# track_metadata_tbl has been pre-defined
track_metadata_tbl
# Compare timings of arrange() and sdf_sort()
microbenchmark(
arranged = track_metadata_tbl %>%
# Arrange by year, then artist_name, then release, then title
___ %>%
# Collect the result
___,
sorted = track_metadata_tbl %>%
# Sort by year, then artist_name, then release, then title
___ %>%
# Collect the result
___,
times = 5
)