Scala 如何抑制齐柏林飞艇中变量值的打印

Scala 如何抑制齐柏林飞艇中变量值的打印,scala,apache-spark,apache-zeppelin,Scala,Apache Spark,Apache Zeppelin,给出以下代码段: val data = sc.parallelize(0 until 10000) val local = data.collect println(s"local.size") 齐柏林飞艇将local的全部值打印到笔记本电脑屏幕上。如何改变这种行为?齐柏林飞艇和spark shell REPL总是打印整个解释器输出 如果您真的只想打印local.size字符串,最好的方法是将println“local.size”语句放在单独的段落中 然后,您可以使用右上角的小“book”图

给出以下代码段:

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

齐柏林飞艇将
local
的全部值打印到笔记本电脑屏幕上。如何改变这种行为?

齐柏林飞艇和spark shell REPL总是打印整个解释器输出

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


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

我要避免的是定义顶级函数,然后调用它:

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

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

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

自0.6.0以来,齐柏林飞艇在spark的解释器配置(可通过GUI访问)中提供了一个布尔标志
Zeppelin.spark.printREPLOutput
,默认设置为
true
。 如果将其值设置为
false
,则会得到只输出显式打印语句的所需行为


另请参见:

FWIW,这似乎是一种新的行为。 直到最近,我们一直在使用Livy0.4,它只输出最终语句的内容(而不是响应整个脚本的输出)

当我们升级到Livy0.5时,行为改变为输出整个脚本

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

此外,这种方法还存在其他可用性问题,这也使得齐柏林飞艇的使用不那么直观

有人记录了这张JIRA票以解决“问题”,请投赞成票:
我使用的一个简单技巧是定义

def !() ="_ __ ___ ___________________________________________________"
并用作

$bang

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

res544: String = _ __ ___ ___________________________________________________
然后我就离开了;)


//希望对您有所帮助

“以及spark shell REPL”。否-REPL没有。在spark shell中,语句“val local=data.collect”不会产生任何打印语句。@javadba可能是我误解了您,在
/bin/spark shell
中,以下是我得到的输出
scala>val local=data.collect local:Array[Int]=Array(0,1,2,3,…
Ok这是一个很好的解决方案。请注意,此解决方案还更改了val数据和本地数据的范围。@Paul ArmandVerhaegen感谢您指出这一点。我认为OP接受的解决方案也是如此。@Caner确实,接受的答案也更改了VAR的范围,但我对您的解决方案进行了评论e函数方法中的范围变化更明显,您的答案有更多的投票权(包括我的)。我发表此评论的原因是,在实施建议的解决方案后,新的局部变量会影响全局变量,如果spark解释器没有重新启动以清除全局变量(在齐柏林飞艇中),这可能会很棘手显然,
zeppelin
开发人员终于意识到了这一点。但总体而言,我对
zeppelin
的可用性不满意,转而使用
jupyter
对我来说恰恰相反。我离开jupyter是因为它在不同内核之间以及后端和前端之间的分离太强。zeppelin没有打开ly允许您将python与scala/spark等元素以及反应式AngularJS元素混合使用,还可以通过print(“%html”+…)注入任意html/javascript(例如,D3、Plotly等)直接进入前端。顺便说一句:我手工编译了0.7.0,已经有了一些改进。然而,交互可用性仍然落后于jupyter一步,jupyter实验室在未来看起来也很有希望……k你关于不混合scala/python的评论对jupyter来说是正确的。我真的很欣赏高端键盘和通用键盘jupyter的用户体验非常好:齐柏林飞艇已经落后到我无法使用的地步。如何在拥有Scala内核的jupyter笔记本上实现同样的效果?