2016-07-03 2 views
1

У меня есть приложение в pyspark, которое включает функции закрытия, содержащие инструкции ведения журнала, я не знаю, как записывать сообщения в файл local/hdfs в pyspark. я пытался что-то, как показано ниже, но не работает:Запись из приложения 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

У меня нет ошибки, но я не нашел сообщения журнала в файлах журналов драйверов или исполнителей. –

ответ

1

Вы можете настроить приложение log4j в настройках log4j и использовать его в своем приложении pyspark. Я не пробовал хранить журналы на HDFS, однако этот метод определенно поможет вам начать работу с ведением журнала на консоль и локально в файлы.

Я написал небольшое сообщение в блоге, чтобы обратиться к вашему решению.

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

Позвольте мне знать, если это работает!

+0

Спасибо @Shantanu Alshi за сообщение. Фактически я применил ваши инструкции, и я получил предупреждение на экране, но я не нашел его нигде в файлах журнала. ничего в spark/logs/nor in /tmp/logfile.out –

+0

Hey @ K.Ali. Помимо консоли также добавьте FILE в свой ресурс rootlogger. - log4j.rootLogger = WARN, консоль, ФАЙЛ –

+0

Спасибо @Shantanu Alshi и извините за позднюю реакцию. Теперь я получаю массаж в logfile.out тоже, но я также получаю все искровые журналы, а также в том же файле. как вы думаете, я могу разбить журналы приложений без искровых журналов? –

Смежные вопросы