Jeśli jeszcze nie zdecydowałeś, napiszę schematy Avro dla twoich danych. Gdy to zrobisz, wybór między plikami kontenerów Avro i plikami Parquet jest tak prosty, jak wymiana, np.
job.setOutputFormatClass(AvroKeyOutputFormat.class);
AvroJob.setOutputKeySchema(MyAvroType.getClassSchema());
dla
job.setOutputFormatClass(AvroParquetOutputFormat.class);
AvroParquetOutputFormat.setSchema(job, MyAvroType.getClassSchema());
Wydaje się, że format Parquet wymaga nieco większej mocy obliczeniowej po stronie zapisu - np. Wymaga pamięci RAM do buforowania i procesora do zamawiania danych itp., Ale powinien zmniejszyć koszty we / wy, przechowywania i transferu, a także zapewnić wydajne czyta szczególnie w przypadku zapytań podobnych do SQL (np. Hive lub SparkSQL), które dotyczą tylko części kolumn.
W jednym projekcie w końcu powróciłem z kontenerów Parquet do Avro, ponieważ schemat był zbyt obszerny i zagnieżdżony (pochodzący z pewnych dość hierarchicznych klas obiektowych) i zaowocował tysiącami kolumn Parquet. Z kolei nasze grupy wierszy były naprawdę szerokie i płytkie, co oznaczało, że zajęło nam to wieki, zanim mogliśmy przetworzyć niewielką liczbę wierszy w ostatniej kolumnie każdej grupy.
Nie miałem jeszcze okazji używać Parquet do bardziej znormalizowanych / rozsądnych danych, ale rozumiem, że jeśli jest dobrze używany, pozwala na znaczną poprawę wydajności.