2015-09-10 13 views
7

Tôi làm việc trong một cụm nơi tôi không có quyền thay đổi tệp log4j.properties để ngừng ghi nhật ký thông tin khi sử dụng pyspark (như được giải thích trong câu trả lời đầu tiên here.) Giải pháp sau đây được giải thích trong câu trả lời đầu tiên của câu hỏi trên cho spark-shell (scala)Làm thế nào để tắt INFO từ nhật ký trong PySpark mà không có thay đổi đối với log4j.properties?

import org.apache.log4j.Logger 
import org.apache.log4j.Level 

Nhưng đối với tia lửa với trăn (tức pyspark), nó đã không làm việc cũng không phải sau

Logger.getLogger("org").setLevel(Level.OFF) 
Logger.getLogger("akka").setLevel(Level.OFF) 

Làm thế nào tôi có thể ngăn chặn việc in ấn tiết của thông tin trong pyspark KHÔNG thay đổi tệp log4j.properties?

Trả lời

13

tôi đã sử dụng sc.setLogLevel("ERROR") vì tôi không có quyền ghi vào tập tin log4j.properties cụm của chúng tôi. Từ số docs:

Control our logLevel. This overrides any user-defined log settings. Valid log levels include: ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE, WARN

+0

Rất tốt, cảm ơn! :) – mbh86

+0

Tại sao giải pháp này không hiệu quả đối với tôi? sc.setLogLevel ("Lỗi") Traceback (gần đây nhất gọi cuối cùng): File "", dòng 1, trong AttributeError: đối tượng 'SparkContext' không có thuộc tính 'setLogLevel' –

+0

@Julian Cienfuegos Đó là lạ. Bạn đang sử dụng Pyspark? Phiên bản nào? Bạn có thể gọi các hàm khác với đối tượng SparkContext của mình, như 'sc.textFile' không? Liệu đầu ra của 'dir (sc)' có in ra tất cả các hàm SparkContext [được liệt kê trong API] hay không (http://spark.apache.org/docs/latest/api/python/pyspark.html#pyspark.SparkContext) ? –

1

từ https://stackoverflow.com/a/32208445/3811916:

logger = sc._jvm.org.apache.log4j 
logger.LogManager.getLogger("org").setLevel(logger.Level.OFF) 
logger.LogManager.getLogger("akka").setLevel(logger.Level.OFF) 

hiện các trick cho tôi. Đây thực chất là như thế nào nó được thực hiện trong vòng PySpark's own tests:

class QuietTest(object): 
    def __init__(self, sc): 
     self.log4j = sc._jvm.org.apache.log4j 

    def __enter__(self): 
     self.old_level = self.log4j.LogManager.getRootLogger().getLevel() 
self.log4j.LogManager.getRootLogger().setLevel(self.log4j.Level.FATAL) 
Các vấn đề liên quan