파이썬 & 오픈소스 개발 Tip과 강좌
이곳은 파이썬과 여러 오픈소스 기반 프레임워크 관련 Tip과 강좌 게시판 입니다. 관련 개발을 진행하면서 알아내신 Tip이나 강좌와 새로운 소식을 적어 주시면 다른 공부하는 분들에게 큰 도움이 됩니다. 감사합니다. SQLER.com은 개발자와 IT전문가의 지식 나눔을 실천하기 위해 노력하고 있습니다.
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