หากคุณยังไม่ได้ตัดสินใจฉันจะเขียน Avro schemas สำหรับข้อมูลของคุณ เมื่อเสร็จแล้วการเลือกระหว่างไฟล์คอนเทนเนอร์ Avro และไฟล์ Parquet นั้นง่ายพอ ๆ กับการสลับออกเช่น
job.setOutputFormatClass(AvroKeyOutputFormat.class);
AvroJob.setOutputKeySchema(MyAvroType.getClassSchema());
สำหรับ
job.setOutputFormatClass(AvroParquetOutputFormat.class);
AvroParquetOutputFormat.setSchema(job, MyAvroType.getClassSchema());
รูปแบบปาร์เก้ดูเหมือนจะเน้นการคำนวณมากกว่าในด้านการเขียนเช่นต้องการ RAM สำหรับบัฟเฟอร์และ CPU ในการสั่งซื้อข้อมูลเป็นต้น แต่ควรลดค่า I / O การจัดเก็บและการถ่ายโอนรวมทั้งทำให้มีประสิทธิภาพ อ่านโดยเฉพาะอย่างยิ่งกับคำสั่ง SQL-like (เช่น Hive หรือ SparkSQL) ที่ระบุเฉพาะบางส่วนของคอลัมน์
ในโครงการหนึ่งฉันลงเอยด้วยการเปลี่ยนจาก Parquet เป็นคอนเทนเนอร์ Avro เนื่องจากสคีมานั้นกว้างขวางเกินไปและซ้อนกัน (ได้มาจากคลาสเชิงวัตถุแบบลำดับชั้นที่ค่อนข้างเป็นธรรม) และส่งผลให้มีคอลัมน์ปาร์เก้ 1,000 คอลัมน์ ในทางกลับกันกลุ่มแถวของเรากว้างและตื้นมากซึ่งหมายความว่าต้องใช้เวลาตลอดไปก่อนที่เราจะประมวลผลแถวจำนวนน้อยในคอลัมน์สุดท้ายของแต่ละกลุ่ม
ฉันยังไม่มีโอกาสใช้ไม้ปาร์เก้สำหรับข้อมูลที่เป็นมาตรฐาน / มีเหตุผลมากขึ้น แต่ฉันเข้าใจว่าหากใช้อย่างดีก็จะช่วยปรับปรุงประสิทธิภาพได้อย่างมีนัยสำคัญ