Spark, Parquet 파일 작업 중, Parquet 파일 내부의 meta data를 조회를 리뷰할 필요가 있어서 진행.
생각보다 많은 정보를 parquet의 meta 데이터에서 추출할 수 있었다.
parquet 파일의 meta 정보 추출
관련 코드는 아래에서 전체 내용을 참조 가능.
pyspark-basic/parquet-metadata.ipynb at main · CloudBreadPaPa/pyspark-basic (github.com)
로드한 Parquet 파일에서 meta 정보 출력
parquet_file.metadata
결과
<pyarrow._parquet.FileMetaData object at 0x7f7e40589310> created_by: parquet-cpp-arrow version 4.0.1 num_columns: 83 num_rows: 9999 num_row_groups: 1 format_version: 1.0 serialized_size: 19443
parquet_file.schema
결과
<pyarrow._parquet.ParquetSchema object at 0x7f7e404b73c0> required group field_id=-1 schema { optional binary field_id=-1 MachineIdentifier (String); optional binary field_id=-1 ProductName (String); optional binary field_id=-1 EngineVersion (String); optional binary field_id=-1 AppVersion (String); optional binary field_id=-1 AvSigVersion (String);
...
parquet_file.metadata.row_group(0).column(3)
결과
<pyarrow._parquet.ColumnChunkMetaData object at 0x7f7e600f3b30> file_offset: 324387 file_path: physical_type: BYTE_ARRAY num_values: 9999 path_in_schema: AppVersion is_stats_set: True statistics: <pyarrow._parquet.Statistics object at 0x7f7e600f3590> has_min_max: True min: 4.10.14393.0 max: 4.9.218.0 null_count: 0 distinct_count: 0 num_values: 9999 physical_type: BYTE_ARRAY logical_type: String converted_type (legacy): UTF8 compression: SNAPPY encodings: ('PLAIN_DICTIONARY', 'PLAIN', 'RLE') has_dictionary_page: True dictionary_page_offset: 317350 data_page_offset: 317874 total_compressed_size: 7037 total_uncompressed_size: 8512
parquet_file.metadata.row_group(0).column(3).statistics
결과
<pyarrow._parquet.Statistics object at 0x7f7e600f3810> has_min_max: True min: 4.10.14393.0 max: 4.9.218.0 null_count: 0 distinct_count: 0 num_values: 9999 physical_type: BYTE_ARRAY logical_type: String converted_type (legacy): UTF8
# check memory mapping pq_array = pa.parquet.read_table(file_path, memory_map=True) print("RSS: {}MB".format(pa.total_allocated_bytes() >> 20))
결과
RSS: 24MB
참고자료
pyspark-basic/parquet-metadata.ipynb at main · CloudBreadPaPa/pyspark-basic (github.com)
Reading and Writing the Apache Parquet Format — Apache Arrow v6.0.0