我正在尝试在PySpark中设置一个像样的日志配置。我有一个YAML配置文件,它设置不同的loghandler。这些处理程序由控制台,文件和使用以下格式的SQLite DB组成:"%(asctime)s - %(name)s - %(levelname)s - %(message)s"
。
# SETUP LOGGING
with open(cfile, 'rt') as f:
config = yaml.safe_load(f.read())
logging.config.dictConfig(config)
lg = logging.getLogger("mylog." + self.__name__())
所以每当我打电话给lg.xxxx('message')
时,一切都得到了很好的处理。
现在我发现了一些关于如何使用log_handler = sc._jvm.org.apache.log4j
从PySpark获取log4j的帖子。但是现在我迷失了如何将这个处理程序添加到我现有的设置中并捕获PySpark控制台上发生的所有消息并将它们保存到文件和SQLite DB中。
答案 0 :(得分:1)
python处理程序无法捕获spark jvm日志,这些都是分离的环境。您有两个选择 - 使用sc._jvm
中的log4j记录python消息并配置log4j处理程序或在作业完成后使用单独的处理程序和合并日志(例如在sqlite中)。