ไฟล์ใหญ่ไป ก็ย่อยให้เล็กด้วย chunk
งาน Data pipeline บางครั้งจะต้องเจอกับไฟล์ขนาดใหญ่มากๆ จนกระทบกับ resource ของเครื่อง เราจึงจำเป็นต้องใช้วิธีอื่นเพื่อ process ไฟล์ให้ได้ผลลัพธ์ที่ดีกว่า
เขียนไฟล์แบบเบสิคด้วย Python
อันนี้ง่ายสุดฮะ แค่เปิดไฟล์ด้วยโหมด w
(write) แล้ววางเนื้อหาแหมะเข้าไป จบเลย
ไฟล์ใหญ่ ต้องใช้ chunk
แต่การเปิดอ่านไฟล์มันต้องใช้ทรัพยากรตามขนาดไฟล์ฮะ ไฟล์ใหญ่ก็กินทรัพยากรมากตามไปด้วย ถ้าไฟล์ใหญ่มากๆ จนอ่านมาเก็บในแรมทีเดียวไม่ได้ล่ะ เราสามารถอ่านไฟล์มาทีละส่วนๆ เรียกว่า chunk ฮะ แต่ละครั้งก็จะใช้ทรัพยากรส่วนเล็กๆ เท่ากับขนาด chunk ที่เราอ่านมา จากนั้นก็ process chunk ไป แล้วก็อ่าน chunk ถัดไป จนครบทั้งไฟล์ฮะ
Chunk กับการบีบอัดไฟล์
การ process chunk รวมถึงการบีบอัดไฟล์ด้วยก็ได้เหมือนกันนะฮะ อย่างแบบนี้ เราใช้การอ่านไฟล์แบบไบนารี่ (rb
: read as binary) อ่านข้อมูลจาก gzip แล้วใช้ library zlib
แกะเนื้อหาออกมาและเขียนลงไฟล์แบบไบนารี่เช่นเดิม (wb
: write as binary)
Chunk กับฐานข้อมูล
และการอ่านข้อมูลจากฐานข้อมูลก็ทำได้เหมือนกันฮะ โดยการ execute query ให้เรียบร้อย แล้วค่อยใช้ fetchmany()
เพื่อหยิบ query result ออกมาก่อนจะใช้ csv
library เพื่อเขียนไฟล์เป็น csv ฮะ
หวังว่าจะเป็นแนวทางให้จัดการไฟล์ได้อย่างมีประสิทธิภาพ จ๊อบไม่พังนะฮะ