使用UDF计算两个向量之间的距离是否效率低



我已经在SPARK中实现了一种分类算法,该算法涉及计算实例之间的距离。该实现使用数据范围(以及可能的原始SQL)。我将实例的功能转换为向量,以便我可以应用一个缩放器并最终使用统一的模式,无论我的数据集恰好具有多少功能。

据我所知,Spark SQL无法使用向量列进行计算。因此,为了计算实例之间的距离,我必须定义python函数并将其注册为UDF。但是我看到不使用UDF的警告,因为数据框架引擎"无法优化UDF"。

我的问题是:

  • 无法计算SQL中两个特征向量之间的距离(不使用UDF)?
  • 使用UDF来计算向量之间的距离对性能有很大的影响,或者无论如何都没有任何火花可以优化?
  • 我错过了其他考虑吗?

要清楚,我希望答案是

  • "您做错了,这确实是效率低下的,这是这样做的方法:..."或
  • " UDF并非本质上效率低下,这对他们来说是一个非常好的使用,并且在"
  • "上没有错过

udf不是有效或不优化的,并且不会传输到JVM代码,尤其是在使用Pyspark时,创建了泡菜对象,OS花费了大量资源来从JVM中转移/out。我已经在Pyspark中使用UDF实施了某些东西,以进行地理位置,但另一方面,它在Scala中实施了几天,它已经在几个小时内完成了。如果必须这样做,请在Scala中进行。也许可以帮助https://github.com/apache/spark/blob/master/examples/src/src/main/scala/scala/org/apache/spark/spark/spark/examples/mllib/cosinesinemilority.scala

相关内容

  • 没有找到相关文章

最新更新