การทำงานกับไฟล์ 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 <- ___