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

Posted

技术标签:

【中文标题】如何在 zeppelin 中抑制变量值的打印【英文标题】:How to suppress printing of variable values in zeppelin 【发布时间】:2015-10-28 18:42:11 【问题描述】:

给定以下 sn-p:

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

好的,这是一个不错的解决方案 请注意,此解决方案还会更改您的 val 数据和本地范围。 @Paul-ArmandVerhaegen 感谢您指出这一点。我认为 OP 接受的解决方案也是如此。 @Caner 事实上,接受的答案也改变了变量的范围,但我评论了你的解决方案,因为范围变化在函数方法中更明显,你的答案有更多的投票(包括我的)。我发布此评论的原因是,在实施建议的解决方案后,新的本地变量会影响全局变量,并且当 spark 解释器未重新启动以清除全局变量(在 Zeppelin 中)时,这可能会很棘手。【参考方案2】:

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

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

【讨论】:

显然zeppelin 开发人员终于意识到了这一点。但我总体上对zeppelin 的可用性不满意并切换到jupyter 对我来说恰恰相反。我要离开 jupyter 是因为它在不同内核之间以及后端和前端之间分离得太厉害了。 Zeppelin 不仅允许您将 python 与 scala / spark 等混合,加上反应性 AngularJS 元素,还可以通过 print("%html" + ...) 注入任意 html/javascript(例如,D3、Plotly 等) .) 直接进入前端。顺便说一句:我手动编译 0.7.0 已经得到了一些改进。然而,交互式可用性仍然落后于 jupyter 一步,jupyter-lab 看起来也很有前途...... k 您关于不混合 scala / python 的 cmets 对于 jupyter 是正确的。我真的很欣赏 jupyter 中的高端键盘和良好的用户体验:zeppelin 远远落后于我无法使用的地步。 如何在带有 Scala 内核的 Jupyter Notebook 中实现相同的功能?【参考方案3】:

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

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

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

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

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

【讨论】:

【参考方案4】:

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

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

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

【讨论】:

"以及 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, ...【参考方案5】:

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

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

run();

【讨论】:

【参考方案6】:

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

def !() ="_ __ ___ ___________________________________________________"

并用作

$bang

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

res544: String = _ __ ___ ___________________________________________________

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

//希望对你有帮助

【讨论】:

以上是关于如何在 zeppelin 中抑制变量值的打印的主要内容,如果未能解决你的问题,请参考以下文章

Python 中如何打印变量值

如何根据百里香叶中的变量值打印不同的文本? [复制]

Inno Setup:如何查看变量值或写入调试输出?

如何在javascript中维护父变量值[重复]

打印具有共同特定变量值的类对象

python 使用.format()在Python中打印变量值