如何防止记录 pyspark 'answer received' 和 'command to send' 消息

How to prevent logging of pyspark 'answer received' and 'command to send' messages

我正在使用 python 使用 pyspark 进行日志记录,并且 pyspark DEBUG 级别的消息正在用所示示例淹没我的日志文件。我如何防止这种情况发生?一个简单的解决方案是将日志级别设置为 INFO,但我需要记录自己的 python DEBUG 级别消息

2015-12-13 15:13:32 4906 DEBUG   : Command to send: j
i
rj
org.apache.spark.SparkConf
e

2015-12-13 15:13:32 4906 DEBUG   : Answer received: yv
2015-12-13 15:13:32 4906 DEBUG   : Command to send: j
i
rj
org.apache.spark.api.java.*
e

2015-12-13 15:13:32 4906 DEBUG   : Answer received: yv
2015-12-13 15:13:32 4906 DEBUG   : Command to send: j
i
rj
org.apache.spark.api.python.*
e

您可以为每个记录器单独设置记录级别

 pyspark_log = logging.getLogger('pyspark')
 pyspark_log.setLevel(logging.ERROR)
logging.basicConfig(level=logging.DEBUG)
logging.getLogger('py4j').setLevel(logging.INFO) # use setLevel(logging.ERROR) is also fine
logging.getLogger('pyspark')

logging.info('Task is successful.')

我遇到了同样的问题,我使用了以下并且一切正常。

pyspark_log = logging.getLogger('pyspark').setLevel(logging.ERROR)
py4j_logger = logging.getLogger("py4j").setLevel(logging.ERROR)
matplotlib_logger = logging.getLogger("matplotlib").setLevel(logging.ERROR)

我也收到了一些 matplotlib lib 日志,所以我也更改了 matplotlib 记录器级别,但如果你没有那个问题,你可以删除该行。

关键组件是“py4j”。您只需要在程序的开头添加一行代码:

py4j_logger = logging.getLogger("py4j").setLevel(logging.INFO)

或者只是:

logging.getLogger("py4j").setLevel(logging.INFO)

控制 pyspark 和 py4j 日志记录的最佳方法是设置以下代码段:

import logging
logging.getLogger("py4j").setLevel(<pyspark-level>)
logging.getLogger('pyspark').setLevel(<py4j-level>)
logger = logging.getLogger('pyspark')

对于你的情况,你应该这样写:

import logging
logging.getLogger("py4j").setLevel(logging.DEBUG)
logging.getLogger('pyspark').setLevel(logging.WARNING)
logger = logging.getLogger('pyspark')