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

使用dlt向DuckDB加载数据时,无需安装pyarrow的报错解决方法

dlt向DuckDB加载数据时,无需安装pyarrow的报错解决方法

我太懂这种“明明没用到某个功能,却被强制要求装依赖”的烦躁了!你遇到的问题其实是dlt内部的默认处理逻辑导致的——yfinance返回的是Pandas DataFrame,而dlt默认会尝试用pyarrow来转换这类数据结构,哪怕你完全没碰Parquet文件。

别担心,咱们直接绕开这个依赖,两种方法都能解决:

方法一:把DataFrame转成字典迭代器(最稳妥)

dlt对普通字典的处理完全不需要pyarrow,所以咱们把yield的DataFrame拆成逐行的字典就行,还能顺便保留索引信息(比如日期):

修改你的source代码:

@dlt.source(name="yahoo")
def source_yahoo(ticker):
    @dlt.resource(primary_key="id", write_disposition="merge")
    def prices_and_dividends():
        df = yf.Ticker(ticker).history(period="1y")
        # 把日期索引转成普通列,避免丢失时间信息
        df = df.reset_index()
        # 逐行转成字典并yield
        for _, row in df.iterrows():
            yield row.to_dict()

    yield prices_and_dividends()

这样修改后,dlt拿到的是纯字典数据,不会触发pyarrow的依赖检查,你的原有requirements.txt完全不用动,直接就能正常运行。

方法二:调整dlt的资源配置(可选)

你也可以在resource装饰器里指定数据类型的处理方式,强制dlt用纯Pandas模式而不是Arrow:

@dlt.resource(primary_key="id", write_disposition="merge", table_format="pandas")
def prices_and_dividends():
    yield yf.Ticker(ticker).history(period="1y")

不过这种方法有时候可能还是会有隐性依赖,所以更推荐第一种方法。

测试一下,修改后再运行你的pipeline,那个MissingDependencyException应该就消失啦!

备注:内容来源于stack exchange,提问作者hopeman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 14:43:10