2016-07-03 3 views
1

pyspark의 응용 프로그램에 로깅 문이 포함 된 클로저 기능이 포함되어 있습니다. pyspark의 로컬/hdfs 파일에 메시지를 기록하는 방법을 모르겠습니다. 나는 다음과 같이 뭔가를 시도했지만 작동하지 않습니다pyspark 응용 프로그램에서 로컬 또는 hdfs 파일로 로깅

import json 
from pyspark import SparkContext 
import logging 

def parse_json(text_line): 
    try: 
     return(json.loads(text_line)) 
    except ValueError: 
     # here I need to log a warning message to a local file or even to default spark logs 
     logger.warn("invalid json structure" + text_line) 
     return({}) 

if __name__ == "__main__": 
    my_data = ['{"id": "111", "name": "aaa"}', 
       '{"wrong json", "name": "bbb"}', 
       '{"id": "333", "name": "ccc"}'] 
    sc = SparkContext() 
    logger = logging.getLogger('py4j') 
    lines = sc.parallelize(my_data) 
    my_data_json = lines.map(parse_json).filter(lambda x: x) 
    print(my_data_json.collect()) 

어떤 도움을주세요!

+2

"작동하지 않음"을 정의 할 수 있습니까? 오류가 발생하거나 "아무 일도 일어나지 않습니까?" – Creos

+0

오류는 발생하지 않지만 드라이버 또는 executor 로그 파일에서 로그 메시지를 찾지 못했습니다. –

답변

1

log4j appender를 log4j 설정에서 구성하고 pyspark 응용 프로그램 내에서 사용할 수 있습니다. HDFS에 로그 저장을 시도하지는 않았지만이 방법을 사용하면 콘솔에 로깅을 시작하고 파일에 로컬로 시작할 수 있습니다.

귀하의 솔루션을 해결하기 위해 작은 블로그 게시물을 작성했습니다.

https://shantanualshi.wordpress.com/2016/07/04/logging-in-pyspark-scripts/

나를 그 작동하는지 알아 보자!

+0

게시물 @ Shantanu Alshi에게 감사드립니다. 실제로 지시 사항을 적용했는데 화면에 경고가 표시되었지만 로그 파일에서 아무 것도 찾을 수 없었습니다. spark/logs /는 /tmp/logfile.out에 아무것도 없습니다. –

+0

안녕하세요 @ K.Ali, 콘솔 외에도 FILE을 rootlogger 속성에 추가하십시오. - log4j.rootLogger = WARN, console, FILE –

+0

@Shantanu Alshi에게 감사 드리며 늦게 반응해서 죄송합니다. 이제 나는 logfile.out에서 마사지를 받지만 같은 파일에서 모든 스파크 로그도 얻는다. 내가 스파크 로그없이 응용 프로그램 로그를 분리 할 수 ​​있다고 생각합니까? –

관련 문제