让我们考虑一个具有2列的Spark DataFrame,其中每列都是Vector类型。 有没有一种方法不涉及UDF来计算它们之间的点积?
我正在使用Spark 2.4(在DataBricks上,如果有涉及其高阶函数的解决方案)
答案 0 :(得分:2)
没有任何合理的*方法可以执行以下操作,因为Vector不是本机类型。相反,它们实现了UserDefinedTypes
and as such can be processed only indirectly。
如果数据狭窄,则可以考虑转换为匹配的强类型Dataset
,但不太可能带来任何重大改进(如果不降低性能)。
*一个人可以得出高度间接的解决方案,例如:
StructType
表示来读取JSON。pos_explode
(DenseVector
)或爆炸索引和值(SparseVector
)的爆炸向量任何这样的事情都是昂贵的,而且完全不切实际的。