Я использую приближение сходства, чтобы найти сходство Жакара между двумя наборами.
val dfA = hashtoseq.toDF("id","values") //values is a set of string
val hashingTF = new HashingTF().setInputCol("values").setOutputCol("features").setNumFeatures(1048576)
val featurizedData = hashingTF.transform(dfA)
val mh = new MinHashLSH()
.setNumHashTables(3)
.setInputCol("features")
.setOutputCol("hashes")
val model = mh.fit(featurizedData)
val dffilter = model.approxSimilarityJoin(featurizedData, featurizedData, 0.45)
Я получаю произвольную запись около 270 ГБ для набора данных 16 ГБ и занимает более 3 часов даже на серверах (3 рабочих узла, каждый узел имеет 64 ГБ ОЗУ и 64 ядра).
Я перешел по следующим ссылкам: -
[ LSH Spark навсегда застрял в функции приближенияJoin () , но у меня это не сработало.
Я также просмотрел веб-сайт базы данных, где они сравнили время выполнения с размером данных. Для данных в МБ, т.е. 436 МБ, приблизительно аналогично, требуется 25 минут. Для набора данных, как в ГБ, возникает проблема создания.[https://databricks.com/blog/2017/05/09/detecting-abuse-scale-locality-sensitive-hashing-uber-engineering.html].
Можем ли мы уменьшить эту случайную запись, внеся некоторые изменения в конфигурацию кода / сервера, или возникла проблема с функцией приблизительным сходством?Есть ли другой эффективный способ вычисления сходства по Джакарду на больших наборах данных?