Scala 群集模式下的Spark日志记录不会打印任何内容

Scala 群集模式下的Spark日志记录不会打印任何内容,scala,logging,apache-spark,Scala,Logging,Apache Spark,在本地模式下运行时,这将向控制台打印日志: object Util extends Logging { val df: DataFrame = ??? df.select("id", "name") .rdd.foreach(r => log.warn("here")) } 但在群集模式下运行时,它不会。我相信这是因为log命令是在工作节点而不是主节点上执行的 如果使用println(…) 如何在控制台中显示日志结果?如果在集群上运行作业,首先应该收集您的

在本地模式下运行时,这将向控制台打印日志:

object Util extends Logging {

    val df: DataFrame = ???

    df.select("id", "name")
      .rdd.foreach(r => log.warn("here"))
}
但在群集模式下运行时,它不会。我相信这是因为log命令是在工作节点而不是主节点上执行的

如果使用
println(…)


如何在控制台中显示日志结果?

如果在集群上运行作业,首先应该
收集
您的
rdd
数据

rdd.collect().foreach(r ⇒ log.warn("here"))

但是,收集所有的
rdd
可能不是一个好主意,因此您可以使用
take
函数来获取少量的rdd元素进行打印。

我刚刚记得“收集”会将数据发送回驱动程序,所以这是可行的。但这并不是一个完整的解决方案,因为有时我们希望记录永远不会发送回驱动程序的中间过程。@在我看来,有两种可能的决定:写入文件,或迭代分区,为每个分区收集RDD并打印,您认为如何?请记住:制作自定义累加器,只发送我们想要打印的内容我想一个解决方案(可能不是最简单的方案)是将数据发送给驱动程序上的akka actor,后者将忠实地打印收到的消息。@BAR如果您提供了,将非常高兴看到。