我有一个嵌套的Python字典形式的数据,我想将其序列化:

{
    top_value: [
        {
            "probabilities": prob_array,
            "metrics": {
                "metric_a": a_array,
                "metric_b": b_array,
                "metric_c": c_array
            }
        }
    ]
}

其中所有*_array个变量都是Numpyarray.

由于Numpy数组有点大(超过top_value0项),有top_value个键和值,我觉得JSON不适合这项工作,所以我想使用ApacheFeather,即使numpy.savezh5py在技术上可以处理这一点.Does PyArrow and Apache Feather actually support this level of nesting?

要序列化ApacheFeather,我需要在序列化之前将数据转换为pyarrow.Table.我该怎么做呢?PyArrow能从数据中自动推断出这个模式吗?如果不是,我该如何定义它?我try 了一些类似的方法:

schema = pa.schema(
    [
        pa.field("lambda_diversity_const", pa.struct(
            [
                pa.field("probabilities", pa.float64()),
                pa.map_(pa.string(), pa.float64())
            ]
        ))
    ]
)

但得到了错误:

TypeError: Cannot convert pyarrow.lib.MapType to pyarrow.lib.Field

因此,我对嵌套的定义一定是错误的.

推荐答案

PyArrow和ApacheFeather真的支持这种级别的嵌套吗?

是的,它是PyArrow的

PyArrow能从数据中自动推断出这个模式吗?

在您的情况下,它不能.Arrow同时支持映射和 struct ,并且不知道该使用哪一个.您必须显式地提供模式.

因此,我对嵌套的定义一定是错误的.

你错过了pa.field

schema = pa.schema(
    [
        pa.field("lambda_diversity_const", pa.struct(
            [
                pa.field("probabilities", pa.float64()),
                pa.field("metrics", pa.map_(pa.string(), pa.float64()))
            ]
        ))
    ]
)

在您的例子中,如果您的字段是数组,则需要使用pa.list_(pa.float64()):

schema = pa.schema(
    [
        pa.field("lambda_diversity_const", pa.struct(
            [
                pa.field("probabilities", pa.list_(pa.float64())),
                pa.field("metrics", pa.map_(pa.string(), pa.list_(pa.float64())))
            ]
        ))
    ]
)

但它将不会非常有用.Arrow针对 struct 化表格数据进行了优化,因此您可能无论如何都希望将模式更改为平面数据,例如:

schema = pa.schema(
    [
        pa.field("batch_id", pa.string()),
        pa.field("record_id", pa.string()),
        pa.field("probability", pa.float64()),
        pa.field("metric_a", pa.float64()),
        pa.field("metric_b", pa.float64()),
        pa.field("metric_c", pa.float64()),
    ]
)

Python相关问答推荐

如何在Python中将returns.context. DeliverresContext与Deliverc函数一起使用?

使用索引列表列表对列进行切片并获取行方向的向量长度

pandas滚动和窗口中有效观察的最大数量

切片包括面具的第一个实例在内的眼镜的最佳方法是什么?

try 将一行连接到Tensorflow中的矩阵

如何创建一个缓冲区周围的一行与manim?

ThreadPoolExecutor和单个线程的超时

所有列的滚动标准差,忽略NaN

转换为浮点,pandas字符串列,混合千和十进制分隔符

如何更改groupby作用域以找到满足掩码条件的第一个值?

如何在达到end_time时自动将状态字段从1更改为0

python—telegraph—bot send_voice发送空文件

如何在Great Table中处理inf和nans

Python协议不兼容警告

如何为需要初始化的具体类实现依赖反转和接口分离?

.awk文件可以使用子进程执行吗?

通过对列的其余部分进行采样,在Polars DataFrame中填充_null`?

如何在微调Whisper模型时更改数据集?

如何使用count()获取特定日期之间的项目

Pandas:新列,从列表中采样,基于列值