vector - 将 pyspark 数据框中的两列相乘。其中一个包含一个向量,其中一个包含一个常数
问题描述
我有一个 pyspark 数据框,它有一个带有向量值的列和一个带有常量数值的列。比如说
A | B
1 | [2,4,5]
5 | [6,5,3]
我想将向量列与常量列相乘。我试图这样做基本上是因为我在 B 列中有单词 wmbeddings,在 A 列中有一些权重。我的最终目的是获得加权嵌入。
解决方案
如果您的矢量数据存储为双精度数组,您可以这样做:
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]|
+------------------+
推荐阅读
- javascript - 在使用 D3.js fork 3D Force-Directed Graph 创建的 2D 图形上的鼠标左键上添加鼠标平移
- reactjs - Babel 6: Module parse failed: Unexpected token (ref 是一个 React 组件)
- sql - 从 XML 列中检索 3 级 XML 字段的所有实例
- angular - 无法生成动态形式的离子
- excel - 如何为列中的每个唯一值创建一个新工作簿并复制相应的行数据加模板
- python-3.x - 在 Mac OSX 上安装 pymssql 和 cython 失败
- javascript - 事件目标随机记录为未定义或预期值
- java - 用Java检查和比较数据库中的数据(时间限制)的好方法是什么?
- sql - 如何将项目添加到 sqlite3 中的单个列表
- java - 如何使用 Netty 从 Java 应用程序提出 GET 查询?