lol*_*ter 7 debugging interpreter scala
我正在使用Scala 2.11.8
和Spark 2.1.0
.我对Scala完全不熟悉.
是否有一种简单的方法来添加单行断点,类似于Python:
import pdb; pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)
我将被放入Scala shell中,我可以检查脚本中执行行的内容是什么?(我也很满意脚本的结尾......)
我目前正在开始我的脚本:
$SPARK_HOME/bin/spark-submit --class "MyClassName" --master local target/scala-2.11/my-class-name_2.11-1.0.jar
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?将极大地帮助调试.
编辑:这个其他SO帖子的解决方案不是很有帮助/需要很多样板+不起作用.
我会推荐以下两个选项之一:
这里的基本思想是,您可以像在 IDE 中调试一段普通代码一样调试您的应用程序。该Run->Evaluate expression
函数允许您对代码进行原型设计,并且您可以使用调试器的大多数常用变量显示、单步(跳过)等功能。但是,由于您不是从 IDE 中运行应用程序,因此您需要:
1、进入Run->Edit configurations
,点击+
右上角的按钮,选择远程,然后复制Command line arguments for running remote JVM
(官方帮助)下文本字段的内容。
对于 2,您可以使用SPARK_SUBMIT_OPTS
环境变量来传递这些 JVM 选项,例如:
SPARK_SUBMIT_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005" \
$SPARK_HOME/bin/spark-submit --class Main --master "spark://127.0.0.1:7077" \
./path/to/foo-assembly-1.0.0.jar
Run Code Online (Sandbox Code Playgroud)
现在您可以点击debug
按钮并设置断点等。
如果您正在编写更多脚本风格的 Scala,您可能会发现在 Zeppelin Spark Scala 解释器中编写它会很有帮助。虽然它更像 Jupyter/IPython 笔记本/ ipython
shell 而不是 ( i
) pdb
,但这确实允许您检查运行时发生的情况。这还允许您绘制数据等图表。我将从这些文档开始。
我认为上面的内容只允许调试在 Driver 节点上运行的代码,而不是在 Worker 节点(运行实际的映射、reduce 等函数)上运行的代码。例如,如果您在 inside 的匿名函数内设置断点myDataFrame.map{ ... }
,它可能不会被命中,因为它是在某个工作节点上执行的。然而,通过egmyDataFrame.head
和评估表达式功能,我已经能够满足我的大部分调试需求。话虽如此,我并没有尝试专门将 Java 选项传递给执行器,所以也许有可能(但可能很乏味)让它工作。
归档时间: |
|
查看次数: |
361 次 |
最近记录: |