以编程方式与Jupyter笔记本或内核交互

时间:2017-09-20 19:36:50

标签: python scala apache-spark jupyter-notebook jupyter

我有一个Jupyter笔记本服务器在某个集群上的Docker容器内运行,我在一堆这样的笔记本中运行一些scala代码(使用Spark)。它们在某个URL(http://blah.com:11111/tree)外部显示。我需要通过编写一个可以从任何地方运行笔记本的python脚本来自动执行此操作:打开URL,运行它,关闭并在需要时重新启动内核等等。在herethere上有一些提及,但是有一个完整的例子会很好:在Python中打开笔记本服务器的HTTP请求,与之交互,关闭它。 nbconvert方法在这种情况下不起作用(假设无法访问Jupyter服务器)。 jupyter kernel_gateway听起来很有趣,但我找不到一个很好的例子,它展示了如何在Python中打开笔记本服务器的HTTP请求,与之交互,关闭它。有一些有趣的信息jupyter-client messagingRESTful API,但我无法找到一个我正在寻找的例子。谢谢。

执行此操作的一种方法是创建笔记本并将以下代码放入其中:

import nbformat, os
from nbconvert.preprocessors import ExecutePreprocessor

print os.getcwd()

with open('./my_notebook.ipynb') as f:
  nb = nbformat.read(f, as_version=4)

ep = ExecutePreprocessor(timeout=30, kernel_name='python2')
ep.preprocess(nb, {'metadata': {'path': './'}})

with open('./my_notebook.ipynb', 'wt') as f:
  nbformat.write(nb, f)

此代码可以作为进一步自动化的基础:将my_notebook.ipynb作为json文件读取,更改其中的代码和单元格,将其存储回来并重新运行它。基于此可以开发各种循环和分支以及多处理。但是,这对spylon-kernel和scala / Spark笔记本不起作用。当我执行kernel_name='spylon-kernel'时,它会给我异常NoSuchKernel: No such kernel named spylon-kernel

我认为解决方案应来自jupyter-client,但我无法找到一个好的例子。

0 个答案:

没有答案