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

การเปรียบเทียบ 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
)
แก้ไขและรันโค้ด