Допустим, у меня есть RDD, например (используя pyspark):
RDDstrings = sc.parallelize(['alpha','alpha4','veta','gamma','delta'])
и я хочу сравнить каждую строку с другими, используя функцию расстояния между строками. Таким образом, конечным результатом в этом случае будет матрица 5x5 с диагональю, которая будет иметь значение 1
, поскольку строковое значение сравнивается с собственным значением на диагоналях.
Итак, моя идея заключалась в следующем:
- Я создал функцию
StringDistance(string,alist)
, которая принимает на входstring
для сравнения сalist
строками. Трансляция
RDDstrings
:broadcastedRDDstrings = sc.broadcast(RDDstrings.collect())
Сопоставьте начальный RDD:
stringsDistances = RDDstrings.map(lambda string:StringDistance(string,broadcastedRDDstrings.value))
Итак, в этом преобразовании я сравниваю каждую строку из исходного RDD с теми же строками RDD, которые были переданы позже.
Результаты правильные. Но мой вопрос в том, является ли это лучшим способом реализации и является ли это правильным использованием вещания. Или я должен cache()
начальный RDD?
Приветствуются любые отрицательные отзывы.