使用支持的驱动时,Kedro Catalog操作GeoJSON数据集仍报错
Kedro GeoJSONDataSet 追加模式加载报错问题解决
问题场景
在Kedro项目中配置GeoJSON数据集,期望每次运行节点时向文件追加数据而非覆盖,配置如下:
suggested_routes_table@geopandas: type: geopandas.GeoJSONDataSet filepath: data/04_feature/routes_suggestions_table.geojson load_args: driver: "GeoJSON" mode: "a"
已确认Fiona环境中GeoJSON驱动支持追加操作(GeoJSON: 'raw'),且直接调用GeoPandas的to_file(path, mode="a")可正常追加数据,但调用catalog.load("suggested_routes_table@geopandas")时触发错误:
DataSetError: Failed while loading data from data set GeoJSONDataSet(filepath=/Users/nicolasbetancourt/Documents/GitHub/jama-coaque-routes/jama-coaque-routes/data/04_feature/routes_suggestions_table.geojson, load_args={'driver': GeoJSON, 'mode': a}, protocol=file, save_args={'driver': GeoJSON}). No such file or directory /vsimem/ec1c814e95f9446290be2efde0c02145.json
删除mode: "a"后数据集可正常加载。
问题原因
mode: "a"是数据保存阶段的参数,用于指定追加模式写入文件,但当前被错误配置在load_args(加载参数)中。Kedro加载GeoJSON数据时,会将load_args传递给Fiona的读取逻辑,而追加模式并不适用于读取操作,导致Fiona尝试在内存临时文件中执行非法操作,最终抛出文件不存在的错误。
解决方案
将mode: "a"从load_args迁移到save_args中,正确配置如下:
suggested_routes_table@geopandas: type: geopandas.GeoJSONDataSet filepath: data/04_feature/routes_suggestions_table.geojson load_args: driver: "GeoJSON" save_args: driver: "GeoJSON" mode: "a"
该配置的作用:
- 加载数据时使用默认读取模式,正常读取GeoJSON文件
- 保存数据时启用追加模式,实现每次运行节点向文件追加新数据
验证说明
- 确认Fiona驱动支持:
fiona.supported_drivers中GeoJSON标记为raw,代表支持读写及追加操作,满足需求 - 首次运行时,若目标文件不存在,
mode="a"会自动创建文件,无需额外处理
内容的提问来源于stack exchange,提问作者Natalio
相关产品推荐
相关产品推荐

