如何有效地从 numpy 数组初始化 pyarrow 中的固定大小的 ListArray?

How to initialise a fixed-size ListArray in pyarrow from a numpy array efficiently?

我如何有效地初始化一个固定大小的 pyarray.ListArray 来自适当准备的 numpy 数组?

documentation of pyarray.array 表明嵌套的可迭代输入结构有效,但实际上如果外部可迭代是一个 numpy 数组则不起作用:

import numpy as np
import pyarrow as pa

n = 1000
w = 3

data = np.arange(n*w,dtype="i2").reshape(-1,w)

# this works:
pa.array(list(data),pa.list_(pa.int16(),w))
# this fails:
pa.array(data,pa.list_(pa.int16(),w))
# -> ArrowInvalid: only handle 1-dimensional arrays

将直接匹配 Arrow 规范的输入数组拆分成 n 个单独的数组,然后从那里重新 assemble 似乎很荒谬。

pyarray.ListArray.from_arrays 似乎需要一个 offsets 参数,它只对可变大小列表有意义。

我相信您正在寻找 pyarrow.FixedSizeListArray.from_arrays,遗憾的是,它似乎没有记录(我继续提交 a JIRA ticket

您需要先将您的 numpy 数组重塑为连续数组。

import numpy as np
import pyarrow as pa

len = 10
width = 3
# Or just skip the initial reshape but keeping it in to simulate real data
arr = np.arange(len*width,dtype="i2").reshape(-1,width)
arr.shape = -1
pa.FixedSizeListArray.from_arrays(arr, width)