การคัดลอกข้อมูลเข้าสู่ Spark
ก่อนที่จะเริ่มทำงานกับ Spark ได้จริง คุณต้องนำข้อมูลเข้าสู่ระบบก่อน sparklyr มีฟังก์ชันอย่างเช่น spark_read_csv() สำหรับอ่านไฟล์ CSV เข้าสู่ Spark โดยตรง แต่โดยทั่วไปแล้ว การคัดลอกข้อมูลจาก R ไปยัง Spark ก็เป็นสิ่งที่มีประโยชน์มาก ซึ่งทำได้ด้วยฟังก์ชัน copy_to() ของ dplyr อย่างไรก็ตาม ควรระวังไว้ว่าการคัดลอกข้อมูลเป็นกระบวนการที่ช้าโดยพื้นฐาน ในความเป็นจริง กลยุทธ์สำคัญในการเพิ่มประสิทธิภาพเมื่อทำงานกับชุดข้อมูลขนาดใหญ่คือการหาวิธีหลีกเลี่ยงการคัดลอกข้อมูลจากที่หนึ่งไปยังอีกที่หนึ่ง
copy_to() รับอาร์กิวเมนต์สองตัว ได้แก่ Spark connection (dest) และ data frame (df) ที่ต้องการคัดลอกไปยัง Spark
เมื่อคัดลอกข้อมูลเข้าสู่ Spark แล้ว คุณอาจอยากตรวจสอบว่าดำเนินการสำเร็จหรือไม่ สามารถดูรายการ data frame ทั้งหมดที่จัดเก็บอยู่ใน Spark ได้โดยใช้ src_tbls() ซึ่งรับเพียง Spark connection (x) เป็นอาร์กิวเมนต์
ตลอดทั้งคอร์สนี้ เราจะสำรวจ metadata ของเพลงจาก Million Song Dataset แม้ Spark จะรองรับข้อมูลได้มากกว่าหนึ่งล้านแถวได้อย่างสบาย แต่เพื่อให้ทุกอย่างเรียบง่ายและตอบสนองได้รวดเร็ว เราจะใช้ชุดข้อมูลที่มี 1,000 track เพื่อให้เข้าใจตรงกัน: track หมายถึงหนึ่งแถวในชุดข้อมูล ซึ่งในชุดข้อมูล 1,000 track นี้จะเป็นสิ่งเดียวกับ เพลง (แม้ว่าชุดข้อมูลเต็มหนึ่งล้านแถวจะมีเพลงซ้ำกันบางส่วนก็ตาม)
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
แนะนำ Spark ด้วย sparklyr ใน R
คำแนะนำการฝึกหัด
track_metadata ซึ่งประกอบด้วยชื่อเพลง ชื่อศิลปิน และ metadata อื่น ๆ ของ 1,000 track ได้ถูกกำหนดไว้ล่วงหน้าใน workspace แล้ว
- ใช้
str()เพื่อสำรวจชุดข้อมูลtrack_metadata - เชื่อมต่อกับ Spark cluster แบบ local และเก็บ connection ไว้ในตัวแปร
spark_conn - คัดลอก
track_metadataไปยัง Spark cluster โดยใช้copy_to() - ตรวจสอบว่ามี data frame ใดบ้างใน Spark โดยใช้
src_tbls() - ตัดการเชื่อมต่อจาก Spark
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Load dplyr
___
# Explore track_metadata structure
___
# Connect to your Spark cluster
spark_conn <- spark_connect("___")
# Copy track_metadata to Spark
track_metadata_tbl <- ___(___, ___, overwrite = TRUE)
# List the data frames available in Spark
___(___)
# Disconnect from Spark
spark_disconnect(___)