pyarrow.dataset.Scanner#
- class pyarrow.dataset.Scanner#
基类:
_Weakrefable一种绑定了上下文和选项的物化扫描操作。
Scanner(扫描器)是用于将扫描任务、数据片段和数据源整合在一起的类。
- __init__(*args, **kwargs)#
方法
__init__(*args, **kwargs)count_rows(self)计算匹配扫描器过滤器(scanner filter)的行数。
from_batches(source, *, Schema schema=None)从批次迭代器创建 Scanner。
from_dataset(Dataset dataset, *[, columns, ...])从 Dataset 创建 Scanner,
from_fragment(Fragment fragment, *, ...[, ...])从 Fragment 创建 Scanner,
head(self, int num_rows)加载数据集的前 N 行。
scan_batches(self)以记录批次(配合对应的片段)的形式消费 Scanner。
take(self, indices)按索引选择数据行。
to_batches(self)以记录批次的形式消费 Scanner。
to_reader(self)将此 Scanner 作为 RecordBatchReader 消费。
to_table(self)将 Scanner 转换为 Table。
属性
从片段中读取批次时所使用的 Schema。
数据的物化 Schema,考虑了投影(projections)。
- dataset_schema#
从片段中读取批次时所使用的 Schema。
- static from_batches(source, *, Schema schema=None, columns=None, Expression filter=None, int batch_size=_DEFAULT_BATCH_SIZE, int batch_readahead=_DEFAULT_BATCH_READAHEAD, int fragment_readahead=_DEFAULT_FRAGMENT_READAHEAD, FragmentScanOptions fragment_scan_options=None, bool use_threads=True, bool cache_metadata=True, MemoryPool memory_pool=None)#
从批次迭代器创建 Scanner。
这会创建一个只能使用一次的 Scanner。它旨在支持从只能读取一次的数据源(例如 RecordBatchReader 或生成器)写入数据集(该过程需要一个 Scanner)。
- 参数:
- source迭代器或兼容 Arrow 的
stream对象 批次的迭代器。这可以是 pyarrow RecordBatchReader、任何实现了 Arrow PyCapsule 流协议的对象,或者是一个实际的 Python RecordBatch 迭代器。
- schema
Schema 批次的 Schema(在传入 Python 迭代器时是必需的)。
- columns
list[str] 或dict[str,Expression], 默认None 要投影的列。这可以是要包含的列名列表(顺序和重复项将保留),也可以是包含 {new_column_name: expression} 值的字典,用于更高级的投影。
列或表达式列表可以使用特殊字段 __batch_index(片段中批次的索引)、__fragment_index(数据集中片段的索引)、__last_in_fragment(批次是否是片段中的最后一个)和 __filename(源文件的名称或源片段的描述)。
列将被传递给数据集和相应的数据片段,以避免加载、复制和反序列化计算链下游不需要的列。默认情况下,所有可用列都会被投影。如果引用的任何列名不存在于数据集的模式中,则会引发异常。
- filter
Expression, defaultNone 扫描将仅返回与过滤器匹配的行。如果可能,谓词将被下推以利用分区信息或在数据源中找到的内部元数据,例如 Parquet 统计信息。否则,它会在产生记录批次之前过滤已加载的记录批次。
- batch_size
int, default 131_072 扫描的记录批次的最大行数。如果扫描的记录批次溢出内存,则可以调用此方法来减小其大小。
- batch_readahead
int, default 16 在一个文件中预读的批次数量。这可能不适用于所有文件格式。增加此数字会增加 RAM 使用量,但也可以提高 IO 利用率。
- fragment_readahead
int, default 4 预读的文件数量。增加此数字会增加 RAM 使用量,但也可以提高 IO 利用率。
- fragment_scan_options
FragmentScanOptions, defaultNone 特定于特定扫描和片段类型的选项,在同一数据集的不同扫描之间可能会有所不同。
- use_threadsbool, 默认
True 如果启用,将使用由可用 CPU 核心数确定的最大并行度。
- cache_metadatabool, default
True 如果启用,扫描时可能会缓存元数据以加快重复扫描。
- memory_pool
MemoryPool, 默认None 如果需要,用于内存分配。如果未指定,则使用默认池。
- source迭代器或兼容 Arrow 的
- static from_dataset(Dataset dataset, *, columns=None, filter=None, int batch_size=_DEFAULT_BATCH_SIZE, int batch_readahead=_DEFAULT_BATCH_READAHEAD, int fragment_readahead=_DEFAULT_FRAGMENT_READAHEAD, FragmentScanOptions fragment_scan_options=None, bool use_threads=True, bool cache_metadata=True, MemoryPool memory_pool=None)#
从 Dataset 创建 Scanner,
- 参数:
- dataset
Dataset 要扫描的数据集。
- columns
list[str] 或dict[str,Expression], 默认None 要投影的列。这可以是要包含的列名列表(顺序和重复项将保留),也可以是包含 {new_column_name: expression} 值的字典,用于更高级的投影。
列或表达式列表可以使用特殊字段 __batch_index(片段中批次的索引)、__fragment_index(数据集中片段的索引)、__last_in_fragment(批次是否是片段中的最后一个)和 __filename(源文件的名称或源片段的描述)。
列将被传递给数据集和相应的数据片段,以避免加载、复制和反序列化计算链下游不需要的列。默认情况下,所有可用列都会被投影。如果引用的任何列名不存在于数据集的模式中,则会引发异常。
- filter
Expression, defaultNone 扫描将仅返回与过滤器匹配的行。如果可能,谓词将被下推以利用分区信息或在数据源中找到的内部元数据,例如 Parquet 统计信息。否则,它会在产生记录批次之前过滤已加载的记录批次。
- batch_size
int, default 131_072 扫描的记录批次的最大行数。如果扫描的记录批次溢出内存,则可以调用此方法来减小其大小。
- batch_readahead
int, default 16 在一个文件中预读的批次数量。这可能不适用于所有文件格式。增加此数字会增加 RAM 使用量,但也可以提高 IO 利用率。
- fragment_readahead
int, default 4 预读的文件数量。增加此数字会增加 RAM 使用量,但也可以提高 IO 利用率。
- fragment_scan_options
FragmentScanOptions, defaultNone 特定于特定扫描和片段类型的选项,在同一数据集的不同扫描之间可能会有所不同。
- use_threadsbool, 默认
True 如果启用,将使用由可用 CPU 核心数确定的最大并行度。
- cache_metadatabool, default
True 如果启用,扫描时可能会缓存元数据以加快重复扫描。
- memory_pool
MemoryPool, 默认None 如果需要,用于内存分配。如果未指定,则使用默认池。
- dataset
- static from_fragment(Fragment fragment, *, Schema schema=None, columns=None, Expression filter=None, int batch_size=_DEFAULT_BATCH_SIZE, int batch_readahead=_DEFAULT_BATCH_READAHEAD, int fragment_readahead=_DEFAULT_FRAGMENT_READAHEAD, FragmentScanOptions fragment_scan_options=None, bool use_threads=True, bool cache_metadata=True, MemoryPool memory_pool=None)#
从 Fragment 创建 Scanner,
- 参数:
- fragment
Fragment 要扫描的片段。
- schema
Schema,可选 该片段的 Schema。
- columns
list[str] 或dict[str,Expression], 默认None 要投影的列。这可以是要包含的列名列表(顺序和重复项将保留),也可以是包含 {new_column_name: expression} 值的字典,用于更高级的投影。
列或表达式列表可以使用特殊字段 __batch_index(片段中批次的索引)、__fragment_index(数据集中片段的索引)、__last_in_fragment(批次是否是片段中的最后一个)和 __filename(源文件的名称或源片段的描述)。
列将被传递给数据集和相应的数据片段,以避免加载、复制和反序列化计算链下游不需要的列。默认情况下,所有可用列都会被投影。如果引用的任何列名不存在于数据集的模式中,则会引发异常。
- filter
Expression, defaultNone 扫描将仅返回与过滤器匹配的行。如果可能,谓词将被下推以利用分区信息或在数据源中找到的内部元数据,例如 Parquet 统计信息。否则,它会在产生记录批次之前过滤已加载的记录批次。
- batch_size
int, default 131_072 扫描的记录批次的最大行数。如果扫描的记录批次溢出内存,则可以调用此方法来减小其大小。
- batch_readahead
int, default 16 在一个文件中预读的批次数量。这可能不适用于所有文件格式。增加此数字会增加 RAM 使用量,但也可以提高 IO 利用率。
- fragment_readahead
int, default 4 预读的文件数量。增加此数字会增加 RAM 使用量,但也可以提高 IO 利用率。
- fragment_scan_options
FragmentScanOptions, defaultNone 特定于特定扫描和片段类型的选项,在同一数据集的不同扫描之间可能会有所不同。
- use_threadsbool, 默认
True 如果启用,将使用由可用 CPU 核心数确定的最大并行度。
- cache_metadatabool, default
True 如果启用,扫描时可能会缓存元数据以加快重复扫描。
- memory_pool
MemoryPool, 默认None 如果需要,用于内存分配。如果未指定,则使用默认池。
- fragment
- projected_schema#
数据的物化 Schema,考虑了投影(projections)。
这是从扫描器返回的任何数据的 Schema。
- scan_batches(self)#
以记录批次(配合对应的片段)的形式消费 Scanner。
- 返回:
- record_batches
TaggedRecordBatch的迭代器
- record_batches
- take(self, indices)#
按索引选择数据行。
仅消费底层数据集中所需的批次。除此之外,它等同于
to_table().take(indices)。- 参数:
- indices
Array或array-like 要在数据集中选择的行索引。
- indices
- 返回:
- to_batches(self)#
以记录批次的形式消费 Scanner。
- 返回:
- record_batchesiterator of
RecordBatch
- record_batchesiterator of
- to_reader(self)#
将此 Scanner 作为 RecordBatchReader 消费。
- 返回:
- RecordBatchReader