没有 UDF 的 Spark 中 DataFrame 的两个 Vector 列之间的点积

Dot product between two Vector columns of a DataFrame in Spark without UDF

让我们考虑一个包含 2 列的 Spark DataFrame,每列都是 Vector 类型。 有没有不涉及 UDF 的方法来计算它们之间的点积?

我正在使用 Spark 2.4(在 DataBricks 上,以防有涉及其高阶函数的解决方案)

没有任何合理的*方式来做这样的事情,因为向量不是本机类型。相反,他们实施 UserDefinedTypes and as such can be processed only indirectly.

如果数据很窄,您可能会考虑转换为匹配强类型 Dataset,但它不太可能带来任何重大改进(如果不降低性能的话)。


* 可以得出高度间接的解决方案,例如:

  • 添加唯一 ID
  • 将矢量转储到 JSON。
  • 通过重新序列化为内部 StructType 表示来读取 JSON。
  • 使用 pos_explode (DenseVector) 或压缩索引和值 (SparseVector) 展开向量
  • 通过唯一性和索引自连接。
  • 汇总。

任何这样的东西都会很昂贵而且完全不切实际。