调用 StructArray.from_arrays 指定缺失值掩码
call StructArray.from_arrays specifying a missing value mask
我正在尝试创建一个 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.int64()), pyarrow.field("col2", pyarrow.string())]
)
-- is_valid: all not null
-- child 0 type: int64
[
null,
1
]
-- child 1 type: string
[
null,
"foo"
]
有没有办法从数组创建一个 StructArray,指定一个缺失值的掩码?或者以后有没有办法敷面膜?
通过在 StructArray.from_arrays
中传递一个 mask
确实很好(-> https://issues.apache.org/jira/browse/ARROW-12677,感谢您提出问题)。
但目前,一个可能的解决方法是使用较低级别的 StructArray.from_buffers
:
struct_type = pyarrow.struct(
[pyarrow.field('col1', pyarrow.int64()), pyarrow.field("col2", pyarrow.string())]
)
col1 = pyarrow.array([None, 1])
col2 = pyarrow.array([None, "foo"])
正在创建一个 pyarrow 掩码数组来构造一个有效性缓冲区:
mask = np.array([True, False])
validity_mask = pyarrow.array(~mask)
validity_bitmask = validity_mask.buffers()[1]
然后我们可以将其用作 from_buffers
中的第一个缓冲区,以指示 StructArray 中的缺失值:
>>> pyarrow.StructArray.from_buffers(struct_type, len(col1), [validity_bitmask], children=[col1, col2])
<pyarrow.lib.StructArray object at 0x7f8b560fa2e0>
-- is_valid:
[
false,
true
]
-- child 0 type: int64
[
null,
1
]
-- child 1 type: string
[
null,
"foo"
]
我正在尝试创建一个 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.int64()), pyarrow.field("col2", pyarrow.string())]
)
-- is_valid: all not null
-- child 0 type: int64
[
null,
1
]
-- child 1 type: string
[
null,
"foo"
]
有没有办法从数组创建一个 StructArray,指定一个缺失值的掩码?或者以后有没有办法敷面膜?
通过在 StructArray.from_arrays
中传递一个 mask
确实很好(-> https://issues.apache.org/jira/browse/ARROW-12677,感谢您提出问题)。
但目前,一个可能的解决方法是使用较低级别的 StructArray.from_buffers
:
struct_type = pyarrow.struct(
[pyarrow.field('col1', pyarrow.int64()), pyarrow.field("col2", pyarrow.string())]
)
col1 = pyarrow.array([None, 1])
col2 = pyarrow.array([None, "foo"])
正在创建一个 pyarrow 掩码数组来构造一个有效性缓冲区:
mask = np.array([True, False])
validity_mask = pyarrow.array(~mask)
validity_bitmask = validity_mask.buffers()[1]
然后我们可以将其用作 from_buffers
中的第一个缓冲区,以指示 StructArray 中的缺失值:
>>> pyarrow.StructArray.from_buffers(struct_type, len(col1), [validity_bitmask], children=[col1, col2])
<pyarrow.lib.StructArray object at 0x7f8b560fa2e0>
-- is_valid:
[
false,
true
]
-- child 0 type: int64
[
null,
1
]
-- child 1 type: string
[
null,
"foo"
]