python - 将值添加到 PySpark 中的 DenseVector 中

标签 python vector pyspark type-conversion

我有一个数据框,我已经将其处理为:

+---------+-------+
| inputs  | temp  | 
+---------+-------+
| [1,0,0] | 12    |
+---------+-------+
| [0,1,0] | 10    |
+---------+-------+
...

inputs 是 DenseVectors 的列。 temp 是一列值。我想在 DenseVector 中附加这些值并创建一列,但我不知道如何开始。对于此所需输出的任何提示:

+---------------+
| inputsMerged  | 
+---------------+
| [1,0,0,12]    | 
+---------------+
| [0,1,0,10]    |
+---------------+
...

编辑:我正在尝试使用 VectorAssembler 方法,但我生成的数组不符合预期。

最佳答案

你可以这样做:

df.show()
+-------------+----+
|       inputs|temp|
+-------------+----+
|[1.0,0.0,0.0]|  12|
|[0.0,1.0,0.0]|  10|
+-------------+----+

df.printSchema()
root
 |-- inputs: vector (nullable = true)
 |-- temp: long (nullable = true)

导入:

import pyspark.sql.functions as F
from pyspark.ml.linalg import Vectors, VectorUDT

创建 udf 以合并向量和元素:

concat = F.udf(lambda v, e: Vectors.dense(list(v) + [e]), VectorUDT())

将 udf 应用于输入临时列:

merged_df = df.select(concat(df.inputs, df.temp).alias('inputsMerged'))

merged_df.show()
+------------------+
|      inputsMerged|
+------------------+
|[1.0,0.0,0.0,12.0]|
|[0.0,1.0,0.0,10.0]|
+------------------+

merged_df.printSchema()
root
 |-- inputsMerged: vector (nullable = true)

关于python - 将值添加到 PySpark 中的 DenseVector 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46556606/

相关文章:

python - 为什么 spark (Python) 吞噬了我的毫秒数?

python - 从停用词中清除列表

python - PyUSB 错误 "USBError: [Errno 2] Entity not found"使用 libusb0 驱动程序 (Windows 10)

c++ - 将数组的一部分复制到 C++ 中的 std::vector

c++ - 如何洗牌包括最后一个元素的数组?

python - Pyspark 基于具有列表或集合的多个条件的其他列创建新列

python - 如何使用图像形式的数据和文本文件形式的标签在 tensorflow 中准备我自己的数据集?

python - 从 FTP 服务器上的 gz 文件检索数据,而不将其写入本地

java - 为什么 Vector 会出现 ConcurrentModificationException?

python - 如何在不更改 log4j.properties 的情况下关闭 PySpark 中日志的信息?