Scala 在Spark日志中获取完整堆栈跟踪

Scala 在Spark日志中获取完整堆栈跟踪,scala,apache-spark,Scala,Apache Spark,我想在spark executor日志中查看完整的堆栈跟踪 例如,我有: 原因:java.lang.RuntimeException:java.lang.Long不是int架构的有效外部类型 位于org.apache.spark.sql.catalyst.expressions.GeneratedClass$SpecificUnsafeProjection.apply_0$(generated.java:434) 位于org.apache.spark.sql.catalyst.expressio

我想在spark executor日志中查看完整的堆栈跟踪

例如,我有:

原因:java.lang.RuntimeException:java.lang.Long不是int架构的有效外部类型 位于org.apache.spark.sql.catalyst.expressions.GeneratedClass$SpecificUnsafeProjection.apply_0$(generated.java:434) 位于org.apache.spark.sql.catalyst.expressions.GeneratedClass$SpecificUnsafeProjection.apply(generated.java:737) 位于org.apache.spark.sql.catalyst.encoders.ExpressionEncoder.toRow(ExpressionEncoder.scala:290) ... 还有18个


我想再看到18个失踪的人。我曾尝试更改为日志记录级别等,但没有任何帮助。

Solusion 1。在spark安装文件夹中,有一个conf文件夹包含log4j.properties文件,您可以将该文件配置为日志级别

Spark default使用了该信息,您可以更改为调试或跟踪以获取所有Spark日志。 配置模板:

级别的其他选项包括:全部、调试、错误、致命、信息、关闭、跟踪、跟踪、警告

解决方案2。将这些记录器放到SparkContext()函数中

import org.apache.log4j.Logger; 
import org.apache.log4j.Level;

Logger.getLogger("org").setLevel(Level.INFO); 
Logger.getLogger("akka").setLevel(Level.INFO);

level.Info可能会更改为DEBUG或TRACE等。

您正在使用Spark UI吗?我正在查看我的Spark文件夹中work下的日志,但我认为它与UI中的stderr和stdout相同。我认为当您看到
)时。。。x more
在堆栈跟踪中,这意味着这些调用已经在其他地方被覆盖(在由引起或顶层执行选项中)。由于延迟评估,Spark堆栈跟踪通常不是最有用的。是的,我确实看到了其他堆栈跟踪,它们似乎是以下跟踪的一部分。不管怎样,我还是算出了上面的错误。结果表明,先声明一个映射,然后再执行map.values.toList不会保留该映射的声明顺序。谢谢你的帮助。