Я реализовал алгоритм классификации в Spark, который включает в себя расчет расстояний между экземплярами.Реализация использует кадры данных (и необработанный SQL, где это возможно).Я преобразую свойства экземпляров в вектор, чтобы я мог применить Scaler и получить единую схему независимо от того, сколько функций у моего набора данных.
Насколько я понимаю, Spark SQL можетне делайте вычисления с векторными столбцами.Поэтому, чтобы вычислить расстояние между экземплярами, мне нужно было определить функцию python и зарегистрировать ее как UDF.Но я вижу предупреждения против использования UDF, потому что механизм обработки данных «не может оптимизировать UDF».
Мои вопросы:
- Правильно ли, что нет способа вычислить расстояниемежду двумя векторами объектов в SQL (без использования UDF)?
- Может ли использование UDF для вычисления расстояния между векторами сильно повлиять на производительность, или Spark вообще ничего не оптимизирует?
- Есть еще какие-то соображения, которые я пропустил?
Чтобы быть ясным, я надеюсь, что ответ будет либо
- "Вы делаетеэто неправильно, это действительно неэффективно, вот как это сделать вместо этого: ... ", или
- " UDF не являются по сути неэффективными, это совершенно хорошее применение для них, и вы не пропускаете ни одной оптимизациина "