调用 StructArray.from_arrays 指定缺失值掩码

问题描述

我正在尝试创建一个缺少值的 pyarrow.StructArray

当我使用 pyarrow.array 传递表示我的记录的元组时,我工作正常:

>>> pyarrow.array(
    [
        None,(1,"foo"),],type=pyarrow.struct(
        [pyarrow.field('col1',pyarrow.int64()),pyarrow.field("col2",pyarrow.string())]
    )
)
-- is_valid:
  [
    false,true
  ]
-- child 0 type: int64
  [
    0,1
  ]
-- child 1 type: string
  [
    "","foo"
  ]

但我想使用 StructArray.from_arrays 并且据我所知没有办法为缺失值提供掩码:

pyarrow.StructArray.from_arrays(
    [
        [None,1],[None,"foo"]
    ],fields=[pyarrow.field('col1',pyarrow.string())]
)
-- is_valid: all not null
-- child 0 type: int64
  [
    null,1
  ]
-- child 1 type: string
  [
    null,"foo"
  ]

有没有办法从数组创建一个 StructArray,指定一个缺失值的掩码?或者以后有没有办法敷面膜?

解决方法

通过在 "scripts": { "test": "echo \"No test specified\"" }, 中传递 mask(-> https://issues.apache.org/jira/browse/ARROW-12677,感谢您打开问题)来实现这一点确实很好。

但就目前而言,一种可能的解决方法可能是让用户使用较低级别的 StructArray.from_arrays

StructArray.from_buffers

创建一个pyarrow掩码数组来构造一个有效性缓冲区:

struct_type = pyarrow.struct(
    [pyarrow.field('col1',pyarrow.int64()),pyarrow.field("col2",pyarrow.string())]
)
col1 = pyarrow.array([None,1])
col2 = pyarrow.array([None,"foo"])

然后我们可以使用它作为 mask = np.array([True,False]) validity_mask = pyarrow.array(~mask) validity_bitmask = validity_mask.buffers()[1] 中的第一个缓冲区来指示 StructArray 中的缺失值:

from_buffers

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...