Henüz karar vermediyseniz, devam edip verileriniz için Avro şemaları yazardım. Tamamlandıktan sonra, Avro konteyner dosyaları ve Parquet dosyaları arasında seçim yapmak, değiştirmek kadar basittir; örneğin,
job.setOutputFormatClass(AvroKeyOutputFormat.class);
AvroJob.setOutputKeySchema(MyAvroType.getClassSchema());
için
job.setOutputFormatClass(AvroParquetOutputFormat.class);
AvroParquetOutputFormat.setSchema(job, MyAvroType.getClassSchema());
Parquet formatı, yazma tarafında biraz daha hesaplama açısından yoğun görünmektedir - örneğin, arabelleğe alma için RAM ve verileri sipariş etmek için CPU gerektirir, ancak G / Ç, depolama ve aktarım maliyetlerini azaltmalı ve verimli hale getirmelidir. özellikle sütunların yalnızca bir bölümünü ele alan SQL benzeri (örneğin, Hive veya SparkSQL) sorgularla okur.
Bir projede, şema çok kapsamlı ve iç içe (oldukça hiyerarşik bazı nesne yönelimli sınıflardan türetilmiş) ve 1000'lerce Parke sütunuyla sonuçlandığı için Parquet'ten Avro konteynerlerine geri döndüm. Buna karşılık, satır gruplarımız gerçekten geniş ve sığdı, bu da her grubun son sütunundaki az sayıda satırı işlemeden önce sonsuza kadar sürdüğü anlamına geliyordu.
Daha normalize / mantıklı veriler için henüz Parquet kullanma şansım olmadı, ancak iyi kullanıldığında önemli performans iyileştirmelerine izin verdiğini anlıyorum.