Nếu bạn chưa quyết định, tôi sẽ tiếp tục và viết lược đồ Avro cho dữ liệu của bạn. Sau khi hoàn tất, việc lựa chọn giữa tệp vùng chứa Avro và tệp Parquet đơn giản như hoán đổi ví dụ,
job.setOutputFormatClass(AvroKeyOutputFormat.class);
AvroJob.setOutputKeySchema(MyAvroType.getClassSchema());
cho
job.setOutputFormatClass(AvroParquetOutputFormat.class);
AvroParquetOutputFormat.setSchema(job, MyAvroType.getClassSchema());
Định dạng Parquet có vẻ chuyên sâu về mặt tính toán hơn một chút về mặt ghi - ví dụ: yêu cầu RAM để đệm và CPU để sắp xếp dữ liệu, v.v. nhưng nó sẽ giảm I / O, chi phí lưu trữ và truyền tải cũng như làm cho hiệu quả đặc biệt là đọc với các truy vấn giống SQL (ví dụ: Hive hoặc SparkSQL) chỉ giải quyết một phần của các cột.
Trong một dự án, tôi đã hoàn nguyên từ vùng chứa Parquet sang Avro vì lược đồ quá rộng và được lồng vào nhau (được dẫn xuất từ một số lớp hướng đối tượng khá phân cấp) và dẫn đến hàng nghìn cột Parquet. Đổi lại, các nhóm hàng của chúng tôi thực sự rộng và nông, có nghĩa là phải mất mãi mãi trước khi chúng tôi có thể xử lý một số lượng nhỏ các hàng trong cột cuối cùng của mỗi nhóm.
Tôi chưa có nhiều cơ hội sử dụng Parquet để có thêm dữ liệu chuẩn hóa / lành mạnh nhưng tôi hiểu rằng nếu được sử dụng tốt, nó sẽ cho phép cải thiện hiệu suất đáng kể.