使用VSCode Databricks扩展运行Kedro时无完整输出的求助
问题:VSCode Databricks扩展执行Kedro脚本仅返回部分输出
在Azure环境中使用VSCode的Databricks扩展搭配Kedro访问Databricks服务器,整体运行正常,但本地执行文件时无法看到完整的Kedro输出,仅能获取以下内容:
31/03/2023, 15:09:32 - Synchronizing code to /Repos/<>@<>.ide ... 31/03/2023, 15:09:32 - Running kedro-hello-world.py ... [03/31/23 13:09:37] INFO Kedro project dp-kedro session.py:355 31/03/2023, 15:09:43 - Done (took 13914ms)
查看扩展日志发现,返回的结果仅包含单条日志,其余输出未被捕获:
{ "level": "debug", "logger": "SDK", "loggingFunction": "CommandExecutionService.commandStatus", "message": "cluster", "operationId": "id", "operationName": "CommandExecutionService.commandStatus", "request": {"method": "GET"}, "response": { "id": "id", "results": { "data": "[03/31/23 12:41:43] INFO Kedro project dp-kedro session.py:355", "resultType": "text", }, "status": "Finished", }, "timestamp": 1680266509470, }
直接在Databricks平台上执行该文件可看到完整的Kedro输出,以下是解决方法:
解决方法
调整Kedro日志输出流:Kedro默认将日志输出到
stderr,而VSCode Databricks扩展可能仅捕获stdout的内容。修改项目conf/base/logging.yml中的控制台处理器配置,将日志重定向到stdout:handlers: console: class: logging.StreamHandler stream: ext://sys.stdout # 替换原ext://sys.stderr formatter: simple保存配置后重新同步代码到Databricks仓库,再执行脚本查看输出。
改用Databricks命令执行方式:在VSCode中,通过Databricks扩展的「Run Command」功能,直接执行Kedro命令(如
kedro run),而非直接运行本地脚本文件。这种方式会直接在集群上触发命令执行,能完整捕获所有输出流内容。更新并检查扩展设置:将VSCode的Databricks扩展更新到最新版本,避免旧版本的输出捕获bug。同时在VSCode的「Output」面板中切换到「Databricks」频道,将扩展日志级别设置为
Debug,查看是否有被遗漏的输出信息。临时调试:显式输出到stdout:如果需要快速调试,可以在Kedro代码中添加
print()语句,将关键内容直接输出到stdout,确保能被VSCode扩展捕获。
内容的提问来源于stack exchange,提问作者YoniPrv
相关产品推荐
相关产品推荐

