Jika Anda belum memutuskan, saya akan melanjutkan dan menulis skema Avro untuk data Anda. Setelah selesai, memilih antara file kontainer Avro dan file Parquet semudah menukar, misalnya,
job.setOutputFormatClass(AvroKeyOutputFormat.class);
AvroJob.setOutputKeySchema(MyAvroType.getClassSchema());
untuk
job.setOutputFormatClass(AvroParquetOutputFormat.class);
AvroParquetOutputFormat.setSchema(job, MyAvroType.getClassSchema());
Format Parket tampaknya sedikit lebih intensif secara komputasi di sisi penulisan - misalnya, membutuhkan RAM untuk buffering dan CPU untuk memesan data, dll. Tetapi harus mengurangi I / O, biaya penyimpanan dan transfer serta membuatnya efisien membaca terutama dengan kueri seperti SQL (mis., Hive atau SparkSQL) yang hanya menangani sebagian kolom.
Dalam satu proyek, saya akhirnya kembali dari Parquet ke kontainer Avro karena skemanya terlalu luas dan bersarang (diturunkan dari beberapa kelas berorientasi objek yang cukup hierarkis) dan menghasilkan 1000-an kolom Parquet. Pada gilirannya, grup baris kami sangat lebar dan dangkal yang berarti butuh waktu lama sebelum kami dapat memproses sejumlah kecil baris di kolom terakhir setiap grup.
Saya belum memiliki banyak kesempatan untuk menggunakan Parquet untuk data yang lebih dinormalisasi / waras tetapi saya mengerti bahwa jika digunakan dengan baik, ini memungkinkan peningkatan kinerja yang signifikan.