Обновите значения в глобальном словаре из UDF PySpark - PullRequest
0 голосов
/ 04 октября 2018

У меня есть пользовательская функция (UDF), которая добавляет новый столбец к кадру данных искры, но она немного медленная.

UDF вычисляет расстояние редактирования между пользовательским вводом и списком правильно написанных слов, и я надеялся ускорить его, сохранив пользовательский ввод и наиболее близкое совпадение слов в глобальном словаре.Идея состоит в том, чтобы сначала обратиться к глобальному словарю, а затем снова потратить время на подсчет баллов по всем словам.

Я новичок в Spark / PySpark, поэтому не знаю всех правильных терминов, но из того, что я прочитал, звучит так, что исполнители не отслеживают глобальные переменные в потоках (или что-то в этом роде)).Я также читал о переменных Broadcast, но я думаю, что они передаются в качестве входных данных, и аккумуляторы допускают только числовые данные.

Вот пример кода, с которым я сейчас работаю:

def guess_word(user_entry):
    user_entry= user_entry.upper().strip()

    # Check if the best match has already been calculated from a previous row, 
    # if not, calculate scores and return the one with the lowest score
    if user_entry not in global_dict:
        scores = {}
        # Calculate scores against every word
        for word in word_dataset:
            word= word.upper().strip()
            if word not in scores:
                scores[word] = distance(user_entry, word)
            else:
                continue
        # Get the word with the lowest score (aka best match)
        word_guess, score = sorted(scores.items(), key=lambda kv: kv[1])[0]

        # Update the global dictionary
        global_dict[user_entry] = (word_guess,score)

    else:
        word_guess = global_dict[user_entry]

    return word_guess


global_dict = {}

guess_word_udf = udf(lambda x: guess_word(x), StringType())

user_data = user_data.withColumn('word_guess', guess_word_udf('user_entry'))

После запуска этогокод, global_dict всегда пуст после выполнения этого кода.Можно ли ...

Я только что понял, что мне не нужен словарь после завершения работы UDF, и этот вопрос теперь бессмысленен: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...