19

给定以下代码段:

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

Zeppelin 将 的全部值打印local到笔记本屏幕上。如何改变这种行为?

4

6 回答 6

28

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

{val data = sc.parallelize(0 until 10000)
val local = data.collect 
println(s"local.size")}
于 2016-01-07T01:15:43.837 回答
12

从 0.6.0 开始,Zeppelinzeppelin.spark.printREPLOutput在 spark 的解释器配置中提供了一个布尔标志(可通过 GUI 访问),true默认设置为。如果您将其值设置为,false那么您将获得仅输出显式打印语句的所需行为。

另请参阅:https ://issues.apache.org/jira/browse/ZEPPELIN-688

于 2017-02-06T08:59:09.560 回答
2

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

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

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

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

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

于 2018-09-10T23:51:29.160 回答
1

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

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

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

于 2015-08-28T02:33:38.757 回答
1

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

def run() : Unit = {
    val data = sc.parallelize(0 until 10000)
    val local = data.collect 
    println(local.size)
}
run();
于 2015-09-04T10:50:40.613 回答
0

我使用的一个简单技巧是定义

def !() ="_ __ ___ ___________________________________________________"

并用作

$bang

高于或接近我要检查的代码并且它有效

res544: String = _ __ ___ ___________________________________________________

然后我就离开那里注释掉;)

// 希望能帮助到你

于 2020-04-18T22:37:31.910 回答