我正在this example之后编写一个Scala / Spark程序。我的工具是IntelliJ和sbt。 (我没有使用scala spark shell。)我正在使用具有logback-classic的scala-logging,我需要减少来自Spark的日志记录,或将spark日志记录定向到另一个.log文件。
我尝试在我的代码中调用sc.setLogLevel("WARN")
,其中sc
是SparkContext
,但没有任何作用。
更糟糕的是,Spark日志输出来自几个不同的程序包(org.apache.spark,o.a.h.m.lib,o.a.h.s.a等)。我希望有比为每个程序包定义追加程序更好的方法。
与我的代码中的日志记录调用相比,我如何关闭Spark日志记录,或者更好地将Spark日志记录重定向到另一个文件?
答案 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">
。