我已经在Spark中实现了分类算法,该算法涉及计算实例之间的距离。该实现使用数据框(如果可能,还使用原始SQL)。我将实例的特征转换为向量,因此无论我的数据集恰好具有多少个特征,我都可以应用Scaler并得到统一的模式。
据我了解,Spark SQL无法使用向量列进行计算。因此,为了计算实例之间的距离,我必须定义一个python函数并将其注册为UDF。但是我看到有关使用UDF的警告,因为数据框引擎“无法优化UDF”。
我的问题是:
要清楚,我希望答案是
答案 0 :(得分:0)
UDF效率不高,也未优化,尤其是如果您使用PySpark,则不会将其传输到jvm代码,创建了pickle对象,OS花了很多资源从jvm进/出传输。我已经在pyspark中使用udf进行了地理定位,并且在几天之内无法完成,而在scala中实现的功能却在数小时内完成。 如果需要,可以在scala中执行。 也许可以帮上忙 https://github.com/apache/spark/blob/master/examples/src/main/scala/org/apache/spark/examples/mllib/CosineSimilarity.scala