Я работаю над проблемой обнаружения дубликатов документов с использованием алгоритма LSH. Для обработки крупномасштабных данных мы используем spark.
У меня около 300 тыс. Документов, по крайней мере, 100-200 слов на документ. На искровом кластере это шаги, которые мы выполняем для фрейма данных.
- Запустить конвейер Spark ML для преобразования текста в токены.
pipeline = Pipeline().setStages([
docAssembler,
tokenizer,
normalizer,
stemmer,
finisher,
stopwordsRemover,
# emptyRowsRemover
])
model = pipeline.fit(spark_df)
final_df = model.transform(spark_df)
- Для каждого документа получите значение MinHash, используя datasketch (https://github.com/ekzhu/datasketch/) библиотека и сохраните его как новый столбец.
final_df_limit.rdd.map(lambda x: (CalculateMinHash(x),)).toDF()
2-й шаг не выполняется, поскольку искра не позволяет нам сохранять значение пользовательского типа в виде столбца. Значение является объектом класса MinHash.
Кто-нибудь знает, как я могу хранить объекты Minhash в данных?