如何在zeppelin中抑制变量值的打印

问题描述 投票:12回答:5

给出以下代码段:

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

Zeppelin将local的全部价值打印到笔记本电脑屏幕上。这种行为怎么可能改变?

scala apache-spark apache-zeppelin
5个回答
6
投票

从0.6.0开始,Zeppelin在spark的解释器配置中提供了一个布尔标志zeppelin.spark.printREPLOutput(可通过GUI访问),默认设置为true。如果将其值设置为false,则会得到所需的行为,即只输出显式的print语句。

另见:https://issues.apache.org/jira/browse/ZEPPELIN-688


21
投票

您还可以尝试在代码周围添加大括号。

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

2
投票

FWIW,这似乎是新的行为。直到最近我们一直在使用Livy 0.4,它只输出最终语句的内容(而不是回显整个脚本的输出)。

当我们升级到Livy 0.5时,行为已更改为输出整个脚本。

虽然拆分段落并隐藏输出确实有效,但对于Zeppelin的可用性来说似乎是不必要的开销。例如,如果您需要刷新输出,那么您必须记住运行两个段落(即设置输出的段落和包含实际println的段落)。

有恕我直言,这种方法的其他可用性问题,再次恕我直言,Zeppelin使用不太直观。

有人记录了这张JIRA票以解决“问题”,请投票给它:LIVY-507


1
投票

Zeppelin以及spark-shell REPL始终打印整个解释器输出。

如果你真的想只打印local.size字符串 - 最好的方法是将println "local.size"语句放在单独的段落中。

然后,您可以使用右上角的小“书”图标隐藏上一段的所有输出。


1
投票

我要做的是避免这种情况,定义一个顶级函数,然后调用它:

def run() : Unit = {
    val data = sc.parallelize(0 until 10000)
    val local = data.collect 
    println(local.size)
}
run();
© www.soinside.com 2019 - 2024. All rights reserved.