Apache spark 如何以编程方式在Pyspark中获取日志级别
我需要知道,在Pyspark中以编程方式,这是日志级别 我知道我可以通过以下方式设置:Apache spark 如何以编程方式在Pyspark中获取日志级别,apache-spark,pyspark,log4j,Apache Spark,Pyspark,Log4j,我需要知道,在Pyspark中以编程方式,这是日志级别 我知道我可以通过以下方式设置: # spark is a SparkSession object spark.sparkContext.setLogLevel(log_level) 但是没有一种等效的方法来检索日志级别 有什么想法吗?谢谢 Spark是开源的,对吗? 源代码将向您展示文档中没有的许多内容。单元测试将为您提供有关教程中未涉及的内容的提示 Demo:浏览并搜索setLogLevel 好吧,Github内部搜索通常很糟糕,但是对
# spark is a SparkSession object
spark.sparkContext.setLogLevel(log_level)
但是没有一种等效的方法来检索日志级别
有什么想法吗?谢谢 Spark是开源的,对吗?
源代码将向您展示文档中没有的许多内容。单元测试将为您提供有关教程中未涉及的内容的提示 Demo:浏览并搜索
setLogLevel
好吧,Github内部搜索通常很糟糕,但是对于一个特定的关键字,它值得一试。事实上,第一个答案给出了一个有趣的片段,来自单元测试(这里重置为分支2.4):
因此
setLogLevel
方法似乎是log4japi的(非常)薄的包装
正是这样:
通过访问Spark会话的JVM(下面是py4j),我终于想出了一个解决方案:
很可能有更好的方法。谢谢您的评论。我终于想出了Python的解决方案(我不能使用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)
...
}
def setLogLevel(logLevel: String) {
...
Utils.setLogLevel(org.apache.log4j.Level.toLevel(upperCased))
}
def setLogLevel(l: org.apache.log4j.Level) {
org.apache.log4j.Logger.getRootLogger().setLevel(l)
}
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