parquet文件的操作記錄

讀取parquet文件的兩種方法
直接讀取爲pandas的dataframe對象,但是速度慢。

def read_parquet_to_dataframe(file_path):
    df=pd.read_parquet(file_path)
    print(df)

所以改爲讀取爲生成器的方式,提高效率,減少內存空間消耗。


def read_parquet_iter_batches():
    parquet_file = pq.ParquetFile(small_parquet_file)
    data_list = []
    for batch in parquet_file.iter_batches():
        column_names = batch.schema.names
        batch_bf = zip(*batch.columns)
        for row in batch_bf:
            item = {}
            for index, value in enumerate(row):
                column_name =column_names[index]
                if column_name.startswith("__"):
                    continue
                item[column_name] = value.as_py()
            print(item)

獲取parquet文件的元信息

import pyarrow.parquet as pq

parquet_file = "36152ae88916cad7eecc74cafa5c6413.parquet"
schema=pq.ParquetFile(parquet_file).schema

可以查看schema,我們可以看到每個字段的名稱以及數據的類型。

<pyarrow._parquet.ParquetSchema object at 0x138bcc608>
required group field_id=-1 schema {
  optional binary field_id=-1 URL (String);
  optional binary field_id=-1 TEXT (String);
  optional double field_id=-1 WIDTH;
  optional double field_id=-1 HEIGHT;
  optional double field_id=-1 similarity;
  optional int64 field_id=-1 hash;
  optional double field_id=-1 punsafe;
  optional double field_id=-1 pwatermark;
  optional double field_id=-1 aesthetic;
  optional binary field_id=-1 BUFFER;
}

['URL', 'TEXT', 'WIDTH', 'HEIGHT', 'similarity', 'hash', 'punsafe', 'pwatermark', 'aesthetic', 'BUFFER']

或者下面的代碼

schema = pq.ParquetFile(small_parquet_file).schema_arrow
print(schema.names)
print(schema.types)

在生成Parquet文件時,通常會先創建一個包含文件元數據的幾百KB的文件,然後逐步將數據寫入到這個文件中,直到生成完整的Parquet文件。這是因爲Parquet文件格式是一種高度壓縮的列式存儲格式,它要求先對數據進行一些預處理和壓縮,才能生成最終的Parquet文件。爲了判斷文件是否生成完畢,可以通過下面的代碼

metadata = pq.ParquetFile(small_parquet_file).metadata
print(metadata)

可以得到下面這些信息

<pyarrow._parquet.FileMetaData object at 0x145220990>
  created_by: parquet-cpp-arrow version 6.0.1
  num_columns: 10
  num_rows: 40000
  num_row_groups: 1
  format_version: 1.0
  serialized_size: 5979
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章