python - 在pyspark中将两个列表传递给pandas_udf?
问题描述
我正在尝试计算相应对之间的欧几里得距离。我试过使用普通的udf,它工作正常。我想尝试使用pandas_udf
以使其更快。
@pandas_udf(T.FloatType(), PandasUDFType.SCALAR)
def calculate_euclidean_distance(feature1, feature2):
from scipy.spatial import distance
dist = float(distance.euclidean(feature1, feature2))
return float(dist)
这就是数据的样子。列 feature1 和 feature2 是两个相同维度的列表。
all_pairs_remove_same_pair_df.select("feature1", "feature2").show()
+--------------------+--------------------+
| feature1| feature2|
+--------------------+--------------------+
|[2.23668528E8, 1....|[2.23668528E8, 1....|
|[2.23668528E8, 1....|[2.23668528E8, 1....|
|[2.23668528E8, 1....|[2.23668528E8, 1....|
|[2.23668528E8, 1....|[2.23668528E8, 1....|
|[2.23668528E8, 1....|[2.23668528E8, 1....|
all_pairs_remove_same_pair_df.withColumn("distance", calculate_euclidean_distance(array(F.col("feature1"), F.col("feature2"))))
这是我得到的错误-
TypeError: calculate_euclidean_distance() missing 1 required positional argument: 'feature2'
解决方案
推荐阅读
- javascript - Redux 不更新状态
- google-sheets - 谷歌表格多个条件下的多个结果
- java - 如何确保函数在调用它的函数完成后运行?
- javascript - 我的导入/导出类代码行有什么问题?
- java - splitByWholeSeparator、splitPreserveAllTokens 和 splitByWholeSeparatorPreserveAllTokens 之间的区别
- javascript - 如何修复无法在 JavaScript 中加载资源?
- vue.js - Vue。使用本地存储自动保存输入值
- javascript - 通过ajax返回存储过程输出
- java - JDBC 连接池偶尔会通过 JNDI 变得不可用(未注册)
- tableau-api - Tableau - 总计错误,它已获得零