PySpark中稠密向量的元素相减

PySpark中稠密向量的元素相减,pyspark,apache-spark-ml,Pyspark,Apache Spark Ml,我有一个Spark数据框,其中有两列是密集向量。我想计算每个向量元素的元素差异(对于数据帧的每一行) 我该怎么做呢?即使可以用u-v减去两列密集向量u和v,也不能用col1-col2减去两列密集向量 因此,我将使用udf: 从pyspark.sql导入函数为F 从pyspark.ml.linalg导入DenseVector,VectorUDT df=sqlContext.createDataFrame([ [DenseVector([1,1.]),DenseVector([0,0.]), [De

我有一个Spark数据框,其中有两列是密集向量。我想计算每个向量元素的元素差异(对于数据帧的每一行)


我该怎么做呢?

即使可以用u-v减去两列密集向量u和v,也不能用col1-col2减去两列密集向量

因此,我将使用udf:

从pyspark.sql导入函数为F
从pyspark.ml.linalg导入DenseVector,VectorUDT
df=sqlContext.createDataFrame([
[DenseVector([1,1.]),DenseVector([0,0.]),
[DenseVector([1,1.])、DenseVector([1,0.]),
[DenseVector([1,1.])、DenseVector([1,1.])]
],[u',v'])
减去向量(λarr:arr[0]-arr[1],VectorUDT())
df2=df.select('*',subtract_vector_udf(F.array('u','v'))。alias('diff'))
df2.show()
>>>
+---------+---------+---------+
|u|v|diff|
+---------+---------+---------+
|[1.0,1.0]|[0.0,0.0]|[1.0,1.0]|
|[1.0,1.0]|[1.0,0.0]|[0.0,1.0]|
|[1.0,1.0]|[1.0,1.0]|[0.0,0.0]|
+---------+---------+---------+

您的示例运行得很好,但我遇到了一个奇怪的错误
分析异常:“由于数据类型不匹配,无法解析‘数组(特征_规格化,预测)’:函数数组的输入都应该是相同的类型,但它是[vector,vector];
。仍然两列都是
vector类型(nullable=true)
。有什么想法吗?你是不是从pyspark.sql导入函数作为F?我编辑了我的帖子来包含它。也许它们不是同一类型的向量:你能做
row=df.select('features_normalized','prediction')。首先()
看看
类型(row[0])
类型(row[1])
?我导入了
F
。两种类型都是
pyspark.ml.linalg.DenseVector