次のスニペットがあるとします。
val data = sc.parallelize(0 until 10000)
val local = data.collect
println(s"local.size")
Zeppelinは、local
の値全体をノートブック画面に出力します。その動作はどのように変更できますか?
0.6.0以降、Zeppelinはブールフラグを提供しますzeppelin.spark.printREPLOutput
Sparkのインタープリター構成(GUIからアクセス可能)で、デフォルトでtrue
に設定されています。その値をfalse
に設定すると、明示的なprintステートメントのみが出力されるという望ましい動作が得られます。
コードの前後に中括弧を追加してみることもできます。
{val data = sc.parallelize(0 until 10000)
val local = data.collect
println(s"local.size")}
FWIW、これは新しい動作のようです。最近まで、Livy 0.4を使用していましたが、(スクリプト全体の出力をエコーするのではなく)最終ステートメントの内容のみを出力していました。
Livy 0.5にアップグレードすると、動作が変更され、スクリプト全体が出力されました。
段落を分割して出力を非表示にすることは機能しますが、Zeppelinの使いやすさに対する不必要なオーバーヘッドのようです。たとえば、出力を更新する必要がある場合は、2つの段落(つまり、出力を設定する段落と実際のprintlnを含む段落)を実行することを忘れないでください。
このアプローチには、IMHOの他のユーザビリティの問題があり、これもIMHOのZeppelinの使いやすさを低下させます。
誰かがこのJIRAチケットをログに記録して、「問題」に対処しました。投票してください: LIVY-507
Zeppelinとspark-ShellREPLは、常にインタープリター出力全体を出力します。
本当にlocal.size文字列のみを出力したい場合は、別の段落内にprintln "local.size"
ステートメントを配置するのが最善の方法です。
次に、右上の小さな「本」アイコンを使用して、前の段落のすべての出力を非表示にできます。
これを回避するために私が行うことは、トップレベル関数を定義してからそれを呼び出すことです。
def run() : Unit = {
val data = sc.parallelize(0 until 10000)
val local = data.collect
println(local.size)
}
run();