web-dev-qa-db-ja.com

zeppelinで変数値の出力を抑制する方法

次のスニペットがあるとします。

val data = sc.parallelize(0 until 10000)
val local = data.collect 
println(s"local.size")

Zeppelinは、localの値全体をノートブック画面に出力します。その動作はどのように変更できますか?

17
javadba

0.6.0以降、Zeppelinはブールフラグを提供しますzeppelin.spark.printREPLOutput Sparkのインタープリター構成(GUIからアクセス可能)で、デフォルトでtrueに設定されています。その値をfalseに設定すると、明示的なprintステートメントのみが出力されるという望ましい動作が得られます。

参照: https://issues.Apache.org/jira/browse/ZEPPELIN-688

11
cubic lettuce

コードの前後に中括弧を追加してみることもできます。

{val data = sc.parallelize(0 until 10000)
val local = data.collect 
println(s"local.size")}
24
Caner

FWIW、これは新しい動作のようです。最近まで、Livy 0.4を使用していましたが、(スクリプト全体の出力をエコーするのではなく)最終ステートメントの内容のみを出力していました。

Livy 0.5にアップグレードすると、動作が変更され、スクリプト全体が出力されました。

段落を分割して出力を非表示にすることは機能しますが、Zeppelinの使いやすさに対する不必要なオーバーヘッドのようです。たとえば、出力を更新する必要がある場合は、2つの段落(つまり、出力を設定する段落と実際のprintlnを含む段落)を実行することを忘れないでください。

このアプローチには、IMHOの他のユーザビリティの問題があり、これもIMHOのZeppelinの使いやすさを低下させます。

誰かがこのJIRAチケットをログに記録して、「問題」に対処しました。投票してください: LIVY-507

2
GMc

Zeppelinとspark-ShellREPLは、常にインタープリター出力全体を出力します。

本当にlocal.size文字列のみを出力したい場合は、別の段落内にprintln "local.size"ステートメントを配置するのが最善の方法です。

次に、右上の小さな「本」アイコンを使用して、前の段落のすべての出力を非表示にできます。

1
bzz

これを回避するために私が行うことは、トップレベル関数を定義してからそれを呼び出すことです。

def run() : Unit = {
    val data = sc.parallelize(0 until 10000)
    val local = data.collect 
    println(local.size)
}
run();
1
Pradyumna