与Zeppelin的内联Bokeh图表

时间:2016-02-02 10:07:09

标签: bokeh apache-zeppelin

是否可以使用Pyspark解释器在Zeppelin中内联显示散景图?

在Jupiter中,例如可以使用命令output_notebook()来加载散景js。

以下是生成简单折线图的示例。

from bokeh.io import output_notebook, show
from bokeh.plotting import figure

output_notebook()

# create a new plot 
p = figure(plot_width=400, plot_height=400, title="Simple Line Plot")

# add a line renderer
p.line([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], line_width=2)

show(p) # show the results

3 个答案:

答案 0 :(得分:2)

实际上已注册发布此内容 - 我试图让它发挥作用,但遇到了一些有趣的问题。

看来Bokeh笔记本输出依赖于IPython笔记本,而zeppelin可能不会。

对于静态输出,Zeppelin中没有很多IPython笔记本常用的资源。

我尝试了一种可能最终起作用的解决方法 - Zeppelin有一些可用于渲染Bokeh HTML文件的Angular标记。

我刚刚将其与以下内容联系起来:

s = "%html "
txt = open('log_lines.html').read()
s += txt
print(s)

编辑:您仍然需要在图形/对象上调用show()来创建要显示的文件。这似乎不会产生错误,但我仍然对Bokeh很新。

答案 1 :(得分:0)

我需要为我的项目制作和弦情节并成功调整散景样本以在pyspark和Zeppelin的python解释器中运行。对Zeppelin的支持仍然需要一些爱,但对我的目的来说效果很好。

%pyspark

import matplotlib as mpl
mpl.use('Agg')
import pandas as pd
from bokeh.charts import Chord
from bokeh.io import show, output_file, output_notebook
from bokeh.sampledata.les_mis import data

nodes = data['nodes']
links = data['links']

nodes_df = pd.DataFrame(nodes)
links_df = pd.DataFrame(links)

source_data = links_df.merge(nodes_df, how='left', left_on='source', right_index=True)
source_data = source_data.merge(nodes_df, how='left', left_on='target', right_index=True)
source_data = source_data[source_data["value"] > 5]  # Select those with 5 or more connections

chord_from_df = Chord(source_data, source="name_x", target="name_y", value="value")
#output_file('chord_from_df.html')
output_notebook(notebook_type='zeppelin')
show(chord_from_df)

答案 2 :(得分:0)

如果您使用的是Bokeh> = 0.12.7,则可以使用Jeff Zhang的bkzep包。例如,在Zeppelin外面这样做:

pip install bkzep

然后,就像在https://github.com/zjffdu/bkzep#how-to-use所说的那样,你只需要在绑定到Spark解释器组的Zeppelin笔记本中执行此操作:

from bokeh.io import output_notebook
import bkzep
output_notebook(notebook_type='zeppelin')

然后你应该可以在你的笔记本中看到内嵌的Bokeh图。我可以使用Bokeh 0.12.13确认这在Zeppelin 0.7.0中有效。例如:

enter image description here