【问题标题】:How to initialise a fixed-size ListArray in pyarrow from a numpy array efficiently?如何有效地从 numpy 数组初始化 pyarrow 中固定大小的 ListArray?
【发布时间】:2021-09-01 16:53:34
【问题描述】:

如何有效地初始化一个固定大小的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 单独的数组然后从那里重新组装似乎很可笑。

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

【问题讨论】:

  • 我对@9​​87654330@一无所知,但如果它对列表和嵌套列表感到满意,arr.tolist() 是一种有效的生成方式。

标签: python numpy pyarrow apache-arrow


【解决方案1】:

我相信您正在寻找 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)

【讨论】:

    猜你喜欢
    • 2013-04-16
    • 2020-10-25
    • 2022-12-03
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 2011-09-02
    • 1970-01-01
    相关资源
    最近更新 更多