2016-12-14 6 views
0

Apache Toree-PySparkでJupyter(v4.2.1)を実行しています。Jupyter(Apache Toree PySpark)でplotlyのinit_notebook_modeを呼び出すときのエラー

import numpy as np 
import pandas as pd 

import plotly.plotly as py 
import plotly.graph_objs as go 
from plotly import tools 
from plotly.offline import iplot, init_notebook_mode 
init_notebook_mode() 

がエラー:私はplotlyのinit_notebook_mode機能を起動しようとすると、私は次のようなエラーに遭遇

Name: org.apache.toree.interpreter.broker.BrokerException 
Message: Traceback (most recent call last): 
    File "/tmp/kernel-PySpark-6415c581-01c4-4c90-b4d9-81773c2bc03f/pyspark_runner.py", line 134, in <module> 
    eval(compiled_code) 
    File "<string>", line 7, in <module> 
    File "/usr/local/lib/python3.4/dist-packages/plotly/offline/offline.py", line 151, in init_notebook_mode 
    display(HTML(script_inject)) 
    File "/usr/local/lib/python3.4/dist-packages/IPython/core/display.py", line 158, in display 
    format = InteractiveShell.instance().display_formatter.format 
    File "/usr/local/lib/python3.4/dist-packages/traitlets/config/configurable.py", line 412, in instance 
    inst = cls(*args, **kwargs) 
    File "/usr/local/lib/python3.4/dist-packages/IPython/core/interactiveshell.py", line 499, in __init__ 
    self.init_io() 
    File "/usr/local/lib/python3.4/dist-packages/IPython/core/interactiveshell.py", line 658, in init_io 
    io.stdout = io.IOStream(sys.stdout) 
    File "/usr/local/lib/python3.4/dist-packages/IPython/utils/io.py", line 34, in __init__ 
    raise ValueError("fallback required, but not specified") 
ValueError: fallback required, but not specified 

StackTrace: org.apache.toree.interpreter.broker.BrokerState$$anonfun$markFailure$1.apply(BrokerState.scala:140) 
org.apache.toree.interpreter.broker.BrokerState$$anonfun$markFailure$1.apply(BrokerState.scala:140) 
scala.Option.foreach(Option.scala:236) 
org.apache.toree.interpreter.broker.BrokerState.markFailure(BrokerState.scala:139) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
java.lang.reflect.Method.invoke(Method.java:498) 
py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:231) 
py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:381) 
py4j.Gateway.invoke(Gateway.java:259) 
py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133) 
py4j.commands.CallCommand.execute(CallCommand.java:79) 
py4j.GatewayConnection.run(GatewayConnection.java:209) 
java.lang.Thread.run(Thread.java:745) 

私は、ウェブ上でこれについてのすべての情報を見つけることができませんよ。 IPythonのutilsでio.pyが失敗したコードを掘り下げたとき、渡されているストリームには両方の属性(writeとflushの両方)が必要であることがわかりました。しかし何らかの理由で、この場合に渡されるストリーム - sys.stdoutには "write"属性のみがあり、 "flush"属性はありません。

+0

[こちら](https://github.com/ipython/ipython/issues/9300)リンクは便利ですか?ここでは、 'IOStream'オブジェクトに 'flush'属性がないバグについて説明しています。このバグは根本的な原因です。 –

答えて

0

これは、プロットのノートブックモードでは、ノートブックのコミュニケーションを行っているIPython jupyterカーネル内で実行されていることを前提としています。 stacktraceに、IPythonパッケージを呼び出そうとしていることがわかります。

しかし、Toreeは異なるジュピターカーネルであり、ノートブックサーバーと通信するための独自のプロトコル処理を備えています。 toreeを使ってPySparkインタプリタを実行しても、(普通のシェルから起動したときと同じように)PySparkを "普通の" PySparkにし、toreeはそのインタプリタの入出力を駆動します。

したがって、IPythonの機構は設定されておらず、その環境でinit_notebook_mode()を呼び出すのは失敗します。これは、ノートブックについては何も知らないシェルから直接起動されたPySparkで実行するときと同じです。

私の知るところでは、現在、toree経由のPySparkセッションから出力をプロットする方法はありません。私たちは最近、同じ問題に直面しました。 toree経由でPythonを実行する代わりに、IPythonカーネルを実行し、そこにPySparkライブラリをインポートしてSparkクラスタに接続する必要があります。これを行うには、ドッキングした例についてはhttps://github.com/jupyter/docker-stacks/tree/master/pyspark-notebookを参照してください。

関連する問題