使用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
相关产品推荐
相关产品推荐

