При построении системы обработки журналов я столкнулся со сценарием, в котором мне нужно искать данные из файла дерева (например, БД) для каждой строки журнала на предмет соответствующего значения. Каков наилучший подход для загрузки внешнего файла очень большого размера в искровую экосистему? Файл дерева имеет размер 2 ГБ.
Вот мой сценарий
- У меня есть файл, содержащий огромное количество строк журнала.
- Каждая строка журнала должна быть разделена разделителем на 70 полей.
- Необходимо найти данные из файла дерева для одного из 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()