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

