在Scala程序中减少Spark的日志输出

时间:2019-01-18 05:29:27

标签: scala apache-spark logback scala-logging

我正在this example之后编写一个Scala / Spark程序。我的工具是IntelliJ和sbt。 (我没有使用scala spark shell。)我正在使用具有logback-classic的scala-logging,我需要减少来自Spark的日志记录,或将spark日志记录定向到另一个.log文件。

我尝试在我的代码中调用sc.setLogLevel("WARN"),其中scSparkContext,但没有任何作用。

更糟糕的是,Spark日志输出来自几个不同的程序包(org.apache.spark,o.a.h.m.lib,o.a.h.s.a等)。我希望有比为每个程序包定义追加程序更好的方法。

与我的代码中的日志记录调用相比,我如何关闭Spark日志记录,或者更好地将Spark日志记录重定向到另一个文件?

3 个答案:

答案 0 :(得分:1)

您需要使用以下命令隐藏Logger软件包中的日志消息

Logger.getLogger("org").setLevel(Level.ERROR)

示例程序-尝试

import org.apache.log4j.{Level, Logger}
import org.apache.spark._
import org.apache.spark.sql._
import org.apache.spark.sql.functions._


object casestudy1 {

  def main(args: Array[String]) {
    Logger.getLogger("org").setLevel(Level.ERROR)
    val spark = SparkSession.builder().appName("Sample-case_study1").master("local[*]").getOrCreate()

    import spark.implicits._

      val df = Seq( (1, "Hello how are you"),(1, "I am fine"),(2, "Yes you are")).toDF("a","b")
      df.show(false)
  }
}

答案 1 :(得分:0)

您可以直接从sparkContext设置火花记录器的日志级别。 要降低Spark的详细程度,您必须将级别设置为ERROR,以使spark仅在出现错误时才写入日志。

val session =  SparkSession.builder().appName("appName").master("local[*]").getOrCreate()
session.sparkContext.setLogLevel("ERROR")

答案 2 :(得分:0)

事实证明很容易。在我的logback.xml中,将<root level="error">设置为关闭Spark产生的噪音。我在要添加日志消息的位置添加了带有附加程序的<logger name="mypackage" level=debug additivity="false">