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

การทำงานกับไฟล์ Parquet

ไฟล์ CSV เหมาะสำหรับบันทึกข้อมูลในรูปแบบตาราง เช่น data.frame ของ R หรือ DataFrames ของ Spark ลงดิสก์ แต่ข้อเสียคืออ่านและเขียนได้ช้ามาก จึงไม่เหมาะกับชุดข้อมูลขนาดใหญ่ ไฟล์ Parquet เป็นทางเลือกที่มีประสิทธิภาพสูงกว่า นอกจากจะใช้กับ Spark แล้ว ยังใช้ร่วมกับเครื่องมืออื่น ๆ ในระบบนิเวศ Hadoop ได้ด้วย เช่น Shark, Impala, Hive และ Pig

ในทางเทคนิค คำว่า ไฟล์ Parquet เป็นการเรียกที่ไม่ถูกต้องนัก เพราะเมื่อจัดเก็บข้อมูลในรูปแบบ Parquet จริง ๆ แล้วจะได้ไดเรกทอรีที่ประกอบด้วยหลายไฟล์ ข้อมูลจะถูกแบ่งไปเก็บไว้ในไฟล์ .parquet หลายไฟล์ ซึ่งช่วยให้กระจายข้อมูลไปยังหลายเครื่องได้ง่าย และยังมีไฟล์ metadata ที่อธิบายเนื้อหาของแต่ละคอลัมน์ด้วย

sparklyr นำเข้าไฟล์ Parquet ได้ผ่าน spark_read_parquet() ซึ่งรับอาร์กิวเมนต์สามตัว ได้แก่ Spark connection, สตริงสำหรับตั้งชื่อ Spark DataFrame ที่จะสร้าง และพาธไปยังไดเรกทอรี Parquet โปรดทราบว่าฟังก์ชันนี้จะนำเข้าข้อมูลเข้าสู่ Spark โดยตรง ซึ่งโดยทั่วไปเร็วกว่าการนำเข้าข้อมูลเข้า R ก่อน แล้วค่อยใช้ copy_to() เพื่อคัดลอกข้อมูลจาก R ไปยัง Spark

spark_read_parquet(sc, "a_dataset", "path/to/parquet/dir")

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

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

ดูคอร์ส

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

มีการสร้าง Spark connection ไว้ให้แล้วในชื่อ spark_conn และสตริงที่ชี้ไปยังไดเรกทอรี Parquet (บนระบบไฟล์ที่ R กำลังทำงานอยู่) ในชื่อ parquet_dir

  • ใช้ dir() เพื่อแสดงรายการพาธไฟล์แบบ absolute ของไฟล์ในไดเรกทอรี Parquet แล้วกำหนดผลลัพธ์ให้กับ filenames
    • อาร์กิวเมนต์แรกควรเป็นไดเรกทอรีที่ต้องการแสดงรายการไฟล์ ได้แก่ parquet_dir
    • เพื่อดึงพาธแบบ absolute (แทนที่จะเป็น relative) ให้ส่ง full.names = TRUE ด้วย
  • สร้าง data_frame ที่มีสองคอลัมน์
    • filename ควรเก็บชื่อไฟล์ที่ดึงมา โดยตัดส่วนไดเรกทอรีออก สร้างได้โดยส่ง filenames ไปยัง basename()
    • size_bytes ควรเก็บขนาดของไฟล์เหล่านั้น สร้างได้โดยส่ง filenames ไปยัง file.size()
  • ใช้ spark_read_parquet() เพื่อนำเข้าข้อมูล timbre เข้าสู่ Spark แล้วกำหนดผลลัพธ์ให้กับ timbre_tbl
    • อาร์กิวเมนต์แรกควรเป็น Spark connection
    • อาร์กิวเมนต์ที่สองควรเป็น "timbre"
    • อาร์กิวเมนต์ที่สามควรเป็น parquet_dir

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

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

# parquet_dir has been pre-defined
parquet_dir

# List the files in the parquet dir
filenames <- ___

# Show the filenames and their sizes
data_frame(
  filename = ___,
  size_bytes = ___
)

# Import the data into Spark
timbre_tbl <- ___
แก้ไขและรันโค้ด