Zeppelin 的内联散景图
Posted
技术标签:
【中文标题】Zeppelin 的内联散景图【英文标题】:Inline Bokeh Graph with Zeppelin 【发布时间】:2016-05-11 01:49:16 【问题描述】:是否可以使用 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
【问题讨论】:
据我所知,没有人就 Zeppelin 支持与我们联系。从来没有任何关于它的 GH 问题或请求,核心开发团队也没有提到它。 (例如,我实际上根本不熟悉 Zeppelin,在看到这个之前我从未听说过它)。这是相当专业的,因此可能是感兴趣的社区成员必须贡献或解决的问题,但是如果您确实找到了解决方案,如果您愿意与我们分享(在 GH 或邮件列表上),我将不胜感激,所以我们可以将它包含在我们的文档中。 【参考方案1】:实际上已注册发布此内容 - 我正在尝试使其工作,但遇到了一些有趣的问题。
Bokeh notebook 的输出似乎依赖于 IPython notebook,而 zeppelin 可能不会。
对于静态输出,很多 IPython notebook 常用的资源在 Zeppelin 中并不容易获得。
我在这里尝试了一种解决方法,但它最终可能会起作用 - Zeppelin 有一些 Angular 标记,可用于呈现 Bokeh html 文件。
我刚刚将它与以下内容内联:
s = "%html "
txt = open('log_lines.html').read()
s += txt
print(s)
编辑:看起来您仍然需要在图形/对象上调用 show() 来创建要显示的文件。这似乎不会产生错误,但我对 Bokeh 还是很陌生。
【讨论】:
我打算将此作为评论添加,但没有声誉 - 我希望在几个小时内有一些代码来解决这个问题。 一个简单而肮脏的解决方法是将 Bokeh html 放在 Web 服务器文件夹中(我使用 Apache)并使用 localhost 将其读回 Zeppelin 太棒了 - 我刚刚将它与以下内容内联: s = "%html " txt = open('log_lines.html').read() s += txt print(s) 【参考方案2】:我的项目需要和弦图,并成功地调整了散景示例以在 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)
【讨论】:
【参考方案3】:如果您使用的是 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 0.12.13 确认这在 Zeppelin 0.7.0 中有效。示例:
【讨论】:
以上是关于Zeppelin 的内联散景图的主要内容,如果未能解决你的问题,请参考以下文章