Даже если вы можете вычесть два плотных вектора u и v с помощью u-v, вы не можете вычесть два столбца плотных векторов с помощью col1-col2.
Поэтому я бы использовал udf:
from pyspark.sql import functions as F
from pyspark.ml.linalg import 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'])
subtract_vector_udf = F.udf(lambda 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]|
+---------+---------+---------+