高级 ArrayStream 实现#
- class Array(obj, schema=None, device=None)#
高级内存中数组表示
Array 是 nanoarrow 的高级内存中数组表示,其范围映射到 Arrow C Data 接口中完全消耗的 ArrowArrayStream 的范围。
Array类是 nanoarrow 的高级内存中数组表示,包含了 PyArrow 的Array、ChunkedArray、RecordBatch和Table的角色。此范围映射到 Arrow C Stream 接口所表示的完全消耗的ArrowArrayStream的范围。请注意,
Array不一定在内存中是连续的(即,它可能由零个或多个ArrowArray对象组成)。参数#
- objarray 或 array stream-like
经
c_array_stream()清理过的类数组或类数组流对象。- schema类 schema,可选
一个可选的 schema,传递给
c_array_stream()。- deviceDevice,可选
与此 Array 所持有的缓冲区关联的设备。默认为 CPU 设备。
示例#
>>> import nanoarrow as na >>> na.Array([1, 2, 3], na.int32()) nanoarrow.Array<int32>[3] 1 2 3
- buffer(i: int) CBufferView#
访问连续数组的单个缓冲区
示例#
>>> import nanoarrow as na >>> array = na.Array([1, 2, 3], na.int32()) >>> array.buffer(1) nanoarrow.c_buffer.CBufferView(int32[12 b] 1 2 3)
- property buffers: Tuple[CBufferView, ...]#
访问连续数组的缓冲区。
示例#
>>> import nanoarrow as na >>> array = na.Array([1, 2, 3], na.int32()) >>> for buffer in array.buffers: ... print(buffer) nanoarrow.c_buffer.CBufferView(bool[0 b] ) nanoarrow.c_buffer.CBufferView(int32[12 b] 1 2 3)
- child(i: int)#
从其父级借用一个子 Array。
参数#
- iint
要返回的子级的索引。
示例#
>>> import nanoarrow as na >>> import pyarrow as pa >>> batch = pa.record_batch( ... [pa.array([1, 2, 3]), pa.array(["a", "b", "c"])], ... names=["col1", "col2"] ... ) >>> array = na.Array(batch) >>> array.child(1) nanoarrow.Array<'col2': string>[3] 'a' 'b' 'c'
- chunk(i: int)#
从底层表示中提取单个连续的 Array。
参数#
- iint
要提取的块的索引。
示例#
>>> import nanoarrow as na >>> array = na.Array([1, 2, 3], na.int32()) >>> array.chunk(0) nanoarrow.Array<int32>[3] 1 2 3
- property device: Device#
获取此数组的缓冲区所在的设备
示例#
>>> import nanoarrow as na >>> array = na.Array([1, 2, 3], na.int32()) >>> array.device <nanoarrow.device.Device> - device_type: CPU <1> - device_id: -1
- static from_chunks(obj: Iterable, schema=None, validate: bool = True)#
创建具有显式块的 Array
从可转换为
c_array()的可迭代对象创建具有显式块的Array。参数#
- obj可迭代的类数组对象
可传递给
c_array()的可迭代对象。- schema类 schema,可选
一个可选的 schema。如果存在,将传递给 obj 中每个项的
c_array();如果不存在,则将从第一个块推断。- validatebool
使用
False放弃构建此数组时执行的验证步骤。
示例#
>>> import nanoarrow as na >>> na.Array.from_chunks([[1, 2, 3], [4, 5, 6]], na.int32()) nanoarrow.Array<int32>[6] 1 2 3 4 5 6
- inspect()#
打印数组的详细信息(类型、长度、偏移量、缓冲区和子数组)。
- iter_children() Iterable#
迭代此 Array 的子级
示例#
>>> import nanoarrow as na >>> import pyarrow as pa >>> batch = pa.record_batch( ... [pa.array([1, 2, 3]), pa.array(["a", "b", "c"])], ... names=["col1", "col2"] ... ) >>> array = na.Array(batch) >>> for child in array.iter_children(): ... print(child) nanoarrow.Array<'col1': int64>[3] 1 2 3 nanoarrow.Array<'col2': string>[3] 'a' 'b' 'c'
- iter_chunk_views() Iterable[CArrayView]#
迭代每个块的准备好的视图
示例#
>>> import nanoarrow as na >>> array = na.Array([1, 2, 3], na.int32()) >>> for view in array.iter_chunk_views(): ... offset, length = view.offset, len(view) ... validity, data = view.buffers ... print(offset, length) ... print(validity) ... print(data) 0 3 nanoarrow.c_buffer.CBufferView(bool[0 b] ) nanoarrow.c_buffer.CBufferView(int32[12 b] 1 2 3)
- iter_chunks() Iterable#
迭代底层表示中缓冲区在内存中连续的 Array。
示例#
>>> import nanoarrow as na >>> array = na.Array([1, 2, 3], na.int32()) >>> for chunk in array.iter_chunks(): ... print(chunk) nanoarrow.Array<int32>[3] 1 2 3
- iter_py() Iterable#
迭代每个元素的默认 Python 表示。
示例#
>>> import nanoarrow as na >>> array = na.Array([1, 2, 3], na.int32()) >>> for item in array.iter_py(): ... print(item) 1 2 3
- iter_scalar() Iterable[Scalar]#
将项目作为标量进行迭代
示例#
>>> import nanoarrow as na >>> array = na.Array([1, 2, 3], na.int32()) >>> for item in array.iter_scalar(): ... print(item) Scalar<int32> 1 Scalar<int32> 2 Scalar<int32> 3
- iter_tuples() Iterable[Tuple]#
将结构数组的行作为元组进行迭代。
示例#
>>> import nanoarrow as na >>> import pyarrow as pa >>> batch = pa.record_batch( ... [pa.array([1, 2, 3]), pa.array(["a", "b", "c"])], ... names=["col1", "col2"] ... ) >>> array = na.Array(batch) >>> for item in array.iter_tuples(): ... print(item) (1, 'a') (2, 'b') (3, 'c')
- property n_buffers: int#
获取此 Array 的每个块中的缓冲区数量
示例#
>>> import nanoarrow as na >>> array = na.Array([1, 2, 3], na.int32()) >>> array.n_buffers 2
- property n_children: int#
获取此类型 Array 的子级数量。
示例#
>>> import nanoarrow as na >>> import pyarrow as pa >>> batch = pa.record_batch( ... [pa.array([1, 2, 3]), pa.array(["a", "b", "c"])], ... names=["col1", "col2"] ... ) >>> array = na.Array(batch) >>> array.n_children 2
- property n_chunks: int#
获取此 Array 底层表示中的块数量。
示例#
>>> import nanoarrow as na >>> array = na.Array([1, 2, 3], na.int32()) >>> array.n_chunks 1
- class Scalar#
围绕
Array元素的通用包装器此类旨在为
Array提供类数组索引的通用实现。这些对象目前只能通过从Array中提取元素来创建。请注意,迭代 Scalar 对象通常效率不高:使用
nanoarrow.iterator中的迭代器可以更有效地迭代Array。示例#
>>> import nanoarrow as na >>> array = na.Array([1, 2, 3], na.int32()) >>> array[0] Scalar<int32> 1 >>> array[0].as_py() 1 >>> array[0].schema <Schema> int32
- as_py()#
获取此标量的 Python 对象表示