首页 > 解决方案 > 将 pyspark 数据框中的两列相乘。其中一个包含一个向量,其中一个包含一个常数

问题描述

我有一个 pyspark 数据框,它有一个带有向量值的列和一个带有常量数值的列。比如说

A | B
1 | [2,4,5]
5 | [6,5,3] 

我想将向量列与常量列相乘。我试图这样做基本上是因为我在 B 列中有单词 wmbeddings,在 A 列中有一些权重。我的最终目的是获得加权嵌入。

标签: vectorpysparkapache-spark-sql

解决方案


如果您的矢量数据存储为双精度数组,您可以这样做:

import breeze.linalg.{Vector => BV}

val data = spark.createDataset(Seq(
    (1, Array[Double](2, 4, 5)),
    (5, Array[Double](6, 5, 3))
  )).toDF("A", "B")

data.as[(Long, Array[Double])].map(r => {
  (BV(r._2) * r._1.toDouble).toArray
}).show()

变成

+------------------+
|             value|
+------------------+
|   [2.0, 4.0, 5.0]|
|[30.0, 25.0, 15.0]|
+------------------+

推荐阅读