pyarrow.parquet.ParquetFile#
- class pyarrow.parquet.ParquetFile(source, *, metadata=None, common_metadata=None, read_dictionary=None, binary_type=None, list_type=None, memory_map=False, buffer_size=0, pre_buffer=False, coerce_int96_timestamp_unit=None, decryption_properties=None, thrift_string_size_limit=None, thrift_container_size_limit=None, filesystem=None, page_checksum_verification=False, arrow_extensions_enabled=True)[source]#
基类:
object单个 Parquet 文件的读取器接口。
- 参数:
- source
str,pathlib.Path,pyarrow.NativeFile, or file-like object 可读源。对于包含 Parquet 文件的字节或类缓冲区文件,请使用 pyarrow.BufferReader。
- metadata
FileMetaData, defaultNone 使用现有的元数据对象,而不是从文件中读取。
- common_metadata
FileMetaData, defaultNone 如果主文件的元数据中没有找到 pandas 模式元数据,则在读取时将使用此元数据,目前没有其他用途。
- read_dictionary
list 要直接读取为 DictionaryArray 的列名列表。
- binary_type
pyarrow.DataType, 默认值None 如果给定,Parquet 二进制列将以此数据类型读取。如果在 Parquet 元数据中找到序列化的 Arrow schema,则此设置将被忽略。
- list_type
pyarrow.DataType的子类, 默认值None 如果给定,非 MAP 重复列将作为此数据类型(pyarrow.ListType 或 pyarrow.LargeListType)的实例读取。如果在 Parquet 元数据中找到序列化的 Arrow schema,则此设置将被忽略。
- memory_mapbool, 默认值
False 如果源是文件路径,使用内存映射读取文件,这在某些环境下可以提高性能。
- buffer_size
int, 默认值 0 如果为正,则在反序列化单个列块时执行读取缓冲。否则,IO 调用将不进行缓冲。
- pre_bufferbool, default
False 合并并并行发出文件读取以提高高延迟文件系统(例如 S3)的性能。如果为 True,Arrow 将使用后台 I/O 线程池。
- coerce_int96_timestamp_unit
str, 默认值None 将以 INT96 格式存储的时间戳强制转换为特定分辨率(例如 'ms')。设置为 None 等同于 'ns',因此 INT96 时间戳将被推断为纳秒级时间戳。
- decryption_properties
FileDecryptionProperties, 默认值None Parquet 模块化加密的文件解密属性。
- thrift_string_size_limit
int, 默认值None 如果不是 None,则覆盖解码 Thrift 结构时分配的最大总字符串大小。默认限制应足以满足大多数 Parquet 文件的需求。
- thrift_container_size_limit
int, 默认值None 如果不是 None,则覆盖解码 Thrift 结构时分配的最大容器总大小。默认限制应足以满足大多数 Parquet 文件的需求。
- filesystem
FileSystem, 默认值None 如果未传递任何内容,将根据路径推断。路径将尝试在本地磁盘文件系统中查找,否则将解析为 URI 以确定文件系统。
- page_checksum_verificationbool, 默认值
False 如果为 True,则验证从文件中读取的每个页面的校验和。
- arrow_extensions_enabledbool, 默认值
True 如果为 True,则尽可能将 Parquet 逻辑类型读取为 Arrow 扩展类型(例如,将 JSON 读取为规范的 arrow.json 扩展类型,或将 UUID 读取为规范的 arrow.uuid 扩展类型)。
- source
示例
生成一个示例 PyArrow 表并将其写入 Parquet 文件
>>> import pyarrow as pa >>> table = pa.table({'n_legs': [2, 2, 4, 4, 5, 100], ... 'animal': ["Flamingo", "Parrot", "Dog", "Horse", ... "Brittle stars", "Centipede"]})
>>> import pyarrow.parquet as pq >>> pq.write_table(table, 'example.parquet')
从 Parquet 文件创建
ParquetFile对象>>> parquet_file = pq.ParquetFile('example.parquet')
读取数据
>>> parquet_file.read() pyarrow.Table n_legs: int64 animal: string ---- n_legs: [[2,2,4,4,5,100]] animal: [["Flamingo","Parrot","Dog","Horse","Brittle stars","Centipede"]]
创建一个 ParquetFile 对象,其中“animal”列为 DictionaryArray
>>> parquet_file = pq.ParquetFile('example.parquet', ... read_dictionary=["animal"]) >>> parquet_file.read() pyarrow.Table n_legs: int64 animal: dictionary<values=string, indices=int32, ordered=0> ---- n_legs: [[2,2,4,4,5,100]] animal: [ -- dictionary: ["Flamingo","Parrot",...,"Brittle stars","Centipede"] -- indices: [0,1,2,3,4,5]]
- __init__(source, *, metadata=None, common_metadata=None, read_dictionary=None, binary_type=None, list_type=None, memory_map=False, buffer_size=0, pre_buffer=False, coerce_int96_timestamp_unit=None, decryption_properties=None, thrift_string_size_limit=None, thrift_container_size_limit=None, filesystem=None, page_checksum_verification=False, arrow_extensions_enabled=True)[source]#
方法
__init__(source, *[, metadata, ...])close([force])iter_batches([batch_size, row_groups, ...])从 Parquet 文件读取流式批次。
read([columns, use_threads, use_pandas_metadata])从 Parquet 格式读取表。
read_row_group(i[, columns, use_threads, ...])从 Parquet 文件读取单个行组。
read_row_groups(row_groups[, columns, ...])从 Parquet 文件读取多个行组。
scan_contents([columns, batch_size])读取给定列和批次大小的文件内容。
属性
返回 Parquet 元数据。
返回 Parquet 文件的行组数。
返回 Parquet 模式,未转换为 Arrow 类型
返回推断的 Arrow 模式,从整个 Parquet 文件的模式转换而来
- iter_batches(batch_size=65536, row_groups=None, columns=None, use_threads=True, use_pandas_metadata=False)[source]#
从 Parquet 文件读取流式批次。
- 参数:
- 生成:
pyarrow.RecordBatch每个批次的内容作为记录批次
示例
生成一个示例 Parquet 文件
>>> import pyarrow as pa >>> table = pa.table({'n_legs': [2, 2, 4, 4, 5, 100], ... 'animal': ["Flamingo", "Parrot", "Dog", "Horse", ... "Brittle stars", "Centipede"]}) >>> import pyarrow.parquet as pq >>> pq.write_table(table, 'example.parquet') >>> parquet_file = pq.ParquetFile('example.parquet') >>> for i in parquet_file.iter_batches(): ... print("RecordBatch") ... print(i.to_pandas()) ... RecordBatch n_legs animal 0 2 Flamingo 1 2 Parrot 2 4 Dog 3 4 Horse 4 5 Brittle stars 5 100 Centipede
- property metadata#
返回 Parquet 元数据。
- property num_row_groups#
返回 Parquet 文件的行组数。
示例
>>> import pyarrow as pa >>> table = pa.table({'n_legs': [2, 2, 4, 4, 5, 100], ... 'animal': ["Flamingo", "Parrot", "Dog", "Horse", ... "Brittle stars", "Centipede"]}) >>> import pyarrow.parquet as pq >>> pq.write_table(table, 'example.parquet') >>> parquet_file = pq.ParquetFile('example.parquet')
>>> parquet_file.num_row_groups 1
- read(columns=None, use_threads=True, use_pandas_metadata=False)[source]#
从 Parquet 格式读取表。
- 参数:
- 返回:
pyarrow.table.Table文件内容作为表(列的集合)。
示例
生成一个示例 Parquet 文件
>>> import pyarrow as pa >>> table = pa.table({'n_legs': [2, 2, 4, 4, 5, 100], ... 'animal': ["Flamingo", "Parrot", "Dog", "Horse", ... "Brittle stars", "Centipede"]}) >>> import pyarrow.parquet as pq >>> pq.write_table(table, 'example.parquet') >>> parquet_file = pq.ParquetFile('example.parquet')
读取表
>>> parquet_file.read(columns=["animal"]) pyarrow.Table animal: string ---- animal: [["Flamingo","Parrot",...,"Brittle stars","Centipede"]]
- read_row_group(i, columns=None, use_threads=True, use_pandas_metadata=False)[source]#
从 Parquet 文件读取单个行组。
- 参数:
- 返回:
pyarrow.table.Table行组的内容作为表(列的集合)
示例
>>> import pyarrow as pa >>> table = pa.table({'n_legs': [2, 2, 4, 4, 5, 100], ... 'animal': ["Flamingo", "Parrot", "Dog", "Horse", ... "Brittle stars", "Centipede"]}) >>> import pyarrow.parquet as pq >>> pq.write_table(table, 'example.parquet') >>> parquet_file = pq.ParquetFile('example.parquet')
>>> parquet_file.read_row_group(0) pyarrow.Table n_legs: int64 animal: string ---- n_legs: [[2,2,4,4,5,100]] animal: [["Flamingo","Parrot",...,"Brittle stars","Centipede"]]
- read_row_groups(row_groups, columns=None, use_threads=True, use_pandas_metadata=False)[source]#
从 Parquet 文件读取多个行组。
- 参数:
- 返回:
pyarrow.table.Table行组的内容作为表(列的集合)。
示例
>>> import pyarrow as pa >>> table = pa.table({'n_legs': [2, 2, 4, 4, 5, 100], ... 'animal': ["Flamingo", "Parrot", "Dog", "Horse", ... "Brittle stars", "Centipede"]}) >>> import pyarrow.parquet as pq >>> pq.write_table(table, 'example.parquet') >>> parquet_file = pq.ParquetFile('example.parquet')
>>> parquet_file.read_row_groups([0,0]) pyarrow.Table n_legs: int64 animal: string ---- n_legs: [[2,2,4,4,5,...,2,4,4,5,100]] animal: [["Flamingo","Parrot","Dog",...,"Brittle stars","Centipede"]]
- scan_contents(columns=None, batch_size=65536)[source]#
读取给定列和批次大小的文件内容。
- 参数:
- 返回:
- num_rows
int 文件中的行数
- num_rows
备注
此函数的主要目的是进行基准测试。扫描在单个线程上执行。
示例
>>> import pyarrow as pa >>> table = pa.table({'n_legs': [2, 2, 4, 4, 5, 100], ... 'animal': ["Flamingo", "Parrot", "Dog", "Horse", ... "Brittle stars", "Centipede"]}) >>> import pyarrow.parquet as pq >>> pq.write_table(table, 'example.parquet') >>> parquet_file = pq.ParquetFile('example.parquet')
>>> parquet_file.scan_contents() 6
- property schema#
返回 Parquet 模式,未转换为 Arrow 类型
- property schema_arrow#
返回推断的 Arrow 模式,从整个 Parquet 文件的模式转换而来
示例
生成一个示例 Parquet 文件
>>> import pyarrow as pa >>> table = pa.table({'n_legs': [2, 2, 4, 4, 5, 100], ... 'animal': ["Flamingo", "Parrot", "Dog", "Horse", ... "Brittle stars", "Centipede"]}) >>> import pyarrow.parquet as pq >>> pq.write_table(table, 'example.parquet') >>> parquet_file = pq.ParquetFile('example.parquet')
读取 Arrow 模式
>>> parquet_file.schema_arrow n_legs: int64 animal: string