我经常在Apache Spark上为ETL作业编写java代码,通常在cloudera CDH集群上设置每个数据源。我正在处理的数据通常很脏。例如,对于邮政编码,我想我可以用一个整数来表示,但有可能存在像“85281-281”一些记录,我们无法解析它作为一个整数。因此抛出了一个异常,程序停止了一堆堆栈跟踪。
以前我有写基于我的假设的代码,在集群上运行它,失败,堆栈跟踪的一个巨大的一堆。包括引发异常的行号。但是找到根本原因非常耗时,特别是我并不是特定的数据行。
所以我觉得以下几点:当错误发生时
的代码应该不会停止。这很简单,使用Java的异常处理系统可以轻松实现这一点。
我想知道这会导致错误的当前堆栈内容的变量,这样我就可以找到输入的(具体线路输入)的根本原因。不只是引发异常的行号。例如NullPointerException,我想知道原始输入数据,输入文件中的哪一行导致了这种情况。
我们有e.printStackTrace()来显示堆栈跟踪中的所有函数调用。我们可以通过在当前堆栈顶部显示内容来做得更好吗?就像调试器一样?
我当然手动打印出通过手工编码的所有变量。但我只想知道是否有一个调试器用来显示这些变量的特定函数。
的Java就不会知道你想* *,看看有什么信息的任何方式。 “打印变量”并不意味着什么。哪些变量?你如何让他们以印刷形式呈现?运行时不知道这些事情。对于任何可能失败的给定操作,您必须使用您定义的逻辑来处理潜在的故障。 – David
您可以使用['jdb'(http://www.tutorialspoint.com/jdb/) – sudoman
可能重复:http://stackoverflow.com/questions/8944362/dumping-state-of-variables-on-exception – msi