Я добился большого успеха в создании поиска ближайших соседей для данной страницы из большого массива страниц. Основной процесс c:
- Считайте ключевые слова каждой страницы в DataFrame (каждая страница является строкой).
- Подгонка и преобразование кадра данных с использованием CountVectorizer для создания столбца «Особенности» для каждой страницы, содержащего векторизованное представление ключевых слов для всего корпуса.
- Подгонка и преобразование векторов с использованием MinHashL SH.
Оттуда я могу преобразовать га sh для данной (одной) страницы и найти расстояние по Джакарду до всех остальных страниц следующим образом:
result_df = hash_model.approxSimilarityJoin(trans_corpus_df, \
trans_key_df, 1.0, distCol="JaccardDistance")\
.select(col("datasetA.id").alias("PageID"),
col("JaccardDistance"))
Это хорошо работает, но мысль пришла мне в голову ... было бы очень полезно иметь матрицу, в которой каждая ячейка была расстоянием Жакара от страницы m до страницы n. Другими словами, что я мог легко найти совпадения ближайших соседей для ЛЮБОЙ страницы в корпусе, просто посмотрев на полученную матрицу.
Помимо метода грубой силы (выполняющего вышеизложенное для каждой страницы), есть способ сделать это более эффективно в PySpark?
Спасибо!