Загрузите файл основных данных для запуска экосистемы - PullRequest
1 голос
/ 23 апреля 2020

При построении системы обработки журналов я столкнулся со сценарием, в котором мне нужно искать данные из файла дерева (например, БД) для каждой строки журнала на предмет соответствующего значения. Каков наилучший подход для загрузки внешнего файла очень большого размера в искровую экосистему? Файл дерева имеет размер 2 ГБ.

Вот мой сценарий

  1. У меня есть файл, содержащий огромное количество строк журнала.
  2. Каждая строка журнала должна быть разделена разделителем на 70 полей.
  3. Необходимо найти данные из файла дерева для одного из 70 полей строки журнала.

Я использую Apache Spark Python API и работаю в кластере из 3 узлов.

Ниже приведен код, который я написал. Но это действительно медленно

def process_logline(line, tree):
    row_dict = {}
    line_list = line.split(" ")
    row_dict["host"] = tree_lookup_value(tree, line_list[0])
    new_row = Row(**row_dict)
    return new_row

def run_job(vals):
    spark.sparkContext.addFile('somefile')
    tree_val = open(SparkFiles.get('somefile'))
    lines = spark.sparkContext.textFile("log_file")
    converted_lines_rdd = lines.map(lambda l: process_logline(l, tree_val))
    log_line_rdd = spark.createDataFrame(converted_lines_rdd)
    log_line_rdd.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...