2

我想在一个变量中传递所有参数。为了实现这一点,我在我的 Python 客户端中为 Papermill 传递了一个字典,使用:

params = {"aviral":"srivastava"}
pm.execute_notebook( 'path/to/input.ipynb', 'path/to/output.ipynb', parameters = params )

现在,我想从 bash 运行相应的命令。在文件中它指出:

papermill local/input.ipynb s3://bkt/output.ipynb -p alpha 0.6 -p l1_ratio 0.1

但是没有给出如何传递字典。

我尝试了许多排列和组合,例如:

papermill test_params.ipynb params_output.ipynb -p params {"aviral":"srivastava"}

papermill test_params.ipynb params_output.ipynb -p params '{"aviral":"srivastava"}'

dict我还阅读了以格式传递 a :'{"aviral":"srivastava"}'然后 json.loads 将完成这项工作。但我没有自由转换输入。它必须立即在脚本中使用。

只是一个最小的脚本来实际检查传递的变量的类型:

params = {} # I tag this with `parameter`
print(type(params))
print(params)

是的,我看到使用 papermill 运行时 params 变量发生了变化,但传递的值是一个完整的字符串。

4

2 回答 2

1

您是否尝试过使用 YAML 字符串或文件?

$papermill local/input.ipynb s3://bkt/output.ipynb -f parameters.yaml

从文档:

“使用YAML传递参数时,通过-y、-b或-f,参数值可以是数组或字典

https://papermill.readthedocs.io/en/latest/usage-execute.html

于 2019-08-10T11:18:38.977 回答
1

由于在您的情况下,您不能直接修改模板笔记本来解析字符串输入,那么拥有一个您调用的 Python 脚本然后执行 papermill 怎么样?这允许您将字符串解析为 python 字典,然后将其传递给 papermill 执行。您也可以以相同的方式传递笔记本名称。

于 2019-05-28T01:32:45.190 回答