gpt4 book ai didi

python - 如何避免 Papermill 中名为 'kernelspec' 的 Keyerror?

转载 作者:行者123 更新时间:2023-12-03 15:50:52 34 4
gpt4 key购买 nike

我正在使用气流(docker)运行造纸厂命令。该脚本存储在 S3 上,我使用纸厂的 Python 客户端运行它。它以一个完全无法理解的错误结束:

Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/ipython_genutils/ipstruct.py", line 132, in __getattr__
result = self[key]
KeyError: 'kernelspec'

我试图查看文档,但徒劳无功。

我正在使用的代码是运行 papermill 命令:
import time
from datetime import datetime, timedelta

from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from mypackage.datastore import db
from mypackage.workflow.transform.jupyter_notebook import run_jupyter_notebook


dag_id = "jupyter-test-dag"
default_args = {
'owner': "aviral",
'depends_on_past': False,
'start_date': "2019-02-28T00:00:00",
'email': "aviral@some_org.com",
'email_on_failure': False,
'email_on_retry': False,
'retries': 0,
'retry_delay': timedelta(minutes=5),
'provide_context': True
}

dag = DAG(
dag_id,
catchup=False,
default_args=default_args,
schedule_interval=None,
max_active_runs=1
)


def print_context(ds, **kwargs):
print(kwargs)
print(ds)
return 'Whatever you return gets printed in the logs'


def run_python_jupyter(**kwargs):
run_jupyter_notebook(
script_location=kwargs["script_location"]
)


create_job_task = PythonOperator(
task_id="create_job",
python_callable=run_python_jupyter,
dag=dag,
op_kwargs={
"script_location": "s3://some_bucket/python3_file_write.ipynb"
}
)

globals()[dag_id] = dag


函数 run_jupyter_notebook是:
def run_jupyter_notebook(**kwargs):
"""Runs Jupyter notebook"""
script_location = kwargs.get('script_location', '')
if not script_location:
raise ValueError(
"Script location was not provided."
)
pm.execute_notebook(script_location, script_location.split(
'.ipynb')[0] + "_output" + ".ipynb")

我希望代码运行没有任何错误,因为我也在本地运行它(不使用 s3 路径,使用本地文件系统路径)

最佳答案

Jupyter 将元数据添加到您的笔记本中。您的错误与缺少关键 kernelspec 下的某些元数据有关。
的示例内核规范 笔记本元数据中的对象:

"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
}
因此,要解决您的错误,您需要更正笔记本元数据以添加正确的 kernelspec 对象。最简单的方法是编辑笔记本 JSON 文档并在元数据第一级对象中添加一个 kernelspec 对象。
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "python",
"version": 3
}
}
}
您的错误可能来自于您使用清洁器读取笔记本输出(如 )这一事实。 nbstripout python 包。如果是这种情况,请注意按照文档更改 nbstripout 设置。

关于python - 如何避免 Papermill 中名为 'kernelspec' 的 Keyerror?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56024237/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com