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

服务端向BigQuery加载表时报bytes类型无法JSON序列化错误

问题成因

该报错在本地运行正常、服务端触发的核心原因来自三类环境差异:

  1. 谷歌凭据文件异常:你上传服务端的google_credentials.json文件可能因传输编码错误、存储格式异常导致读取时返回bytes类型内容,谷歌云SDK解析JSON时仅支持字符串输入,进而触发序列化错误。
  2. MySQL连接配置差异:Linux服务端的mysql-connector默认配置与Windows不同,默认未开启unicode转换,若SQL查询涉及CHAR/VARCHAR/BLOB类型字段,返回结果会以bytes格式存入DataFrame,BigQuery导入环节无法序列化bytes类型值。
  3. 依赖版本不匹配:服务端的google-cloud-bigquery、pandas、mysql-connector-python版本低于本地环境,低版本组件未兼容bytes类型字段的自动转码逻辑。
解决方案

按照优先级依次执行以下操作即可解决:

  • 校验凭据文件:登录服务端执行cat /root/google_credentials.json,确认输出为正常明文JSON格式,若为乱码重新上传正确的凭据文件,上传时选择文本传输模式,确保运行代码的用户对该文件有可读权限。
  • 修正MySQL连接参数:给mysql连接配置新增编码和unicode参数,强制返回字符串类型结果:
mydb = mysql.connector.connect(
    host='host',
    user='1111',
    password='password',
    database="my_database",
    charset='utf8mb4',
    use_unicode=True
)
  • 主动转码DataFrame字段:如果修改连接配置后仍报错,在DataFrame生成后新增bytes转字符串逻辑:
# 遍历所有列,将bytes类型值转为utf-8字符串
for col in df.columns:
    if df[col].dtype == object:
        df[col] = df[col].apply(lambda x: x.decode('utf-8') if isinstance(x, bytes) else x)
  • 统一依赖版本:将服务端相关依赖升级到和本地一致的版本,执行命令:
    pip install --upgrade google-cloud-bigquery pandas pyarrow mysql-connector-python

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:45:02