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

无需Pandas,从Airflow上传Parquet文件至S3的实现问题

无需Pandas,用PyArrow + Airflow S3Hook上传Parquet到S3的解决方案

当然可以不用Pandas实现需求。你遇到的ValueError: Fileobj must implement read错误,是因为S3Hook.load_file_obj要求file_obj参数是实现了read方法的类文件对象,而你传入的是原始bytes类型,不符合要求。

修正后的代码如下:

import io
import pyarrow as pa
import pyarrow.parquet as pq
from datetime import datetime

# 假设pt是已有的pyarrow.Table对象
writer = pa.BufferOutputStream()
pq.write_table(pt, writer)
body = writer.getvalue()

# 将字节数据包装为具备read方法的类文件对象
file_obj = io.BytesIO(body)

s3_hook.load_file_obj(
    file_obj=file_obj,
    key='LoginAppWeb/login_app_web_{}.parquet'.format(datetime.now().strftime('%Y%m%d')),
    bucket_name=var_ambt["S3_OUTPUT_BUCKET"],
    replace=True
)

关键说明

  • io.BytesIO会把pyarrow输出的字节数据包装成类文件对象,自动实现read方法,完美匹配load_file_obj的参数要求。
  • 整个流程完全不需要依赖Pandas,仅用PyArrow处理Parquet数据,结合Airflow S3Hook完成上传。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:03:14