You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AWS Wrangler读写数据遇numpy.ndarray类型不支持问题求助

解决AWS Wrangler写入DynamoDB时numpy.ndarray类型不支持问题

DynamoDB不支持直接存储numpy.ndarray类型,你可以通过将数组转换为Python原生列表的方式解决,既保留可读性,也无需依赖numpy即可读取。

处理步骤:

  1. 识别DataFrame中的ndarray类型列
    先筛选出所有值为numpy数组的列:

    import numpy as np
    ndarray_cols = [col for col in df.columns if isinstance(df[col].iloc[0], np.ndarray)]
    
  2. 转换ndarray列为Python列表
    利用numpy数组的tolist()方法,将每个数组转成原生列表:

    for col in ndarray_cols:
        df[col] = df[col].apply(lambda x: x.tolist())
    
  3. 执行DynamoDB写入操作
    转换完成后再调用写入方法:

    wr.dynamodb.put_df(df=df, table_name=table_name)
    

针对分块读取(chunked=True)的场景

如果是分块读取Parquet文件,需要在每个块处理时重复上述转换步骤:

import numpy as np
import awswrangler as wr

s3_path = "your-s3-path"
dataset = True
table_name = "your-dynamodb-table"

for chunk in wr.s3.read_parquet(path=s3_path, dataset=dataset, chunked=True):
    # 识别并转换当前chunk中的ndarray列
    ndarray_cols = [col for col in chunk.columns if isinstance(chunk[col].iloc[0], np.ndarray)]
    for col in ndarray_cols:
        chunk[col] = chunk[col].apply(lambda x: x.tolist())
    # 写入当前chunk到DynamoDB
    wr.dynamodb.put_df(df=chunk, table_name=table_name)

转换后的列表会被DynamoDB以L(列表)类型存储,读取后直接是Python原生列表,无需依赖numpy即可操作,完全满足你的需求。

内容的提问来源于stack exchange,提问作者NNM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 15:15:59