如何在SparkR脚本中找到导致错误的行?

问题描述

我无法调试程序,因为我不知道错误发生在哪一行(这不是R错误消息的一部分)。通常,我将print语句放入代码中,因此在执行时我知道它已经走了多远,但是R在运行时发生错误时似乎会丢弃所有print()输出

这个简单的脚本演示了问题所在:

%r
print(1)
print(no_such_variable)
print(2)

执行该脚本将导致错误,因为未定义no_such_variable。但是在Spark Databricks中,显示的结果是:

Error in print(no_such_variable) : object 'no_such_variable' not found Error in print(no_such_variable) : object 'no_such_variable' not found
Error in print(no_such_variable) : object 'no_such_variable' not found
In addition: Warning message:
In handleErrors(returnStatus,conn) : 

没有与错误相关的行号,并且我的print语句没有输出。显然,我可以将打印输出发送到文件中(大概在每个语句之后刷新它),但这对于我自1975年开始编写基本代码以来一直在做的事情似乎还有很长的路要走。

人们如何在Spark中编写复杂的R代码,而又看不到代码中发生了什么?我真的希望我缺少一些简单的东西...

解决方法

message打印表示为条件的文本。在Databricks中,即使有其他情况(例如错误),也会打印出来。

message("Print1")
message(no_such_variable)
message("Print2")
#> Print1
#> Error in message(no_such_variable) : object 'no_such_variable' not found

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...