apache spark-如何在Pyspark中以编程方式获取日志级别


0

我需要知道,在Pyspark中编程,这是日志级别。

我知道我可以设定,通过做:

# spark is a SparkSession object
spark.sparkContext.setLogLevel(log_level)

但是,没有一种等效的方法来检索日志级别。

有什么想法吗?谢谢!

2 答案


0

通过访问Spark会话的JVM(下面是py4j),我终于想出了一个解决方案:

def get_log_level(spark):
    log_manager = spark._jvm.org.apache.log4j.LogManager
    trace = spark._jvm.org.apache.log4j.Level.TRACE
    debug = spark._jvm.org.apache.log4j.Level.DEBUG
    info = spark._jvm.org.apache.log4j.Level.INFO
    warn = spark._jvm.org.apache.log4j.Level.WARN
    error = spark._jvm.org.apache.log4j.Level.ERROR
    fatal = spark._jvm.org.apache.log4j.Level.FATAL
    logger = log_manager.getRootLogger()

if logger.isEnabledFor(trace):
    return "TRACE"
elif logger.isEnabledFor(debug):
    return "DEBUG"
elif logger.isEnabledFor(info):
    return "INFO"
elif logger.isEnabledFor(warn):
    return "WARN"
elif logger.isEnabledFor(error):
    return "ERROR"
elif logger.isEnabledFor(fatal):
    return "FATAL"
else:
    return None

很可能有更好的方法。


0

Spark是开源的,对吧?

演示:在Github上浏览Spark项目并搜索setLogLevel。

好吧,Github的内部搜索通常很糟糕,但是对于一个特定的关 key字,它值得一试。实际上,第一个答案给了你这个有趣的片段,来自单元 test(这里重置为分支2.4):

https://github.com/apache/spark/blob/branch-2.4/sql/hive-thriftserver/src/test/scala/org/apache/spark/sql/hive/HiveMetastoreLazyInitializationSuite.scala

val originalLevel = org.apache.log4j.Logger.getRootLogger().getLevel
try {
  // Avoid outputting a lot of expected warning logs
  spark.sparkContext.setLogLevel("error")
...
} finally {
  spark.sparkContext.setLogLevel(originalLevel.toString)
...
}

因此setLogLevel方法似乎是Log4J API的一个(非常)薄的包装器。

这正是:

https://github.com/apache/spark/blob/branch-2.4/core/src/main/scala/org/apache/spark/SparkContext.scala网站

def setLogLevel(logLevel: String) {
  ...
  Utils.setLogLevel(org.apache.log4j.Level.toLevel(upperCased))
}

https://github.com/apache/spark/blob/branch-2.4/core/src/main/scala/org/apache/spark/util/Utils.scala

def setLogLevel(l: org.apache.log4j.Level) {
  org.apache.log4j.Logger.getRootLogger().setLevel(l)
}

我来回答

写文章

提问题

面试题