У меня есть искровой фрейм данных, с помощью которого я вычисляю евклидово расстояние между строкой и заданным набором кординатов. Я воссоздаю структурно подобный фрейм данных 'df_vector', чтобы объяснить лучше.
from pyspark.ml.feature import VectorAssembler
arr = [[1,2,3], [4,5,6]]
df_example = spark.createDataFrame(arr, ['A','B','C'])
assembler = VectorAssembler(inputCols=[x for x in df_example.columns],outputCol='features')
df_vector = assembler.transform(df_example).select('features')
>>> df_vector.show()
+-------------+
| features|
+-------------+
|[1.0,2.0,3.0]|
|[4.0,5.0,6.0]|
+-------------+
>>> df_vector.dtypes
[('features', 'vector')]
Как видите, столбец features
представляет собой вектор. На практике я получаю этот векторный столбец как результат StandardScaler
. В любом случае, поскольку мне нужно вычислить евклидово расстояние, я делаю следующее
rdd = df_vector.select('features').rdd.map(lambda r: np.linalg.norm(r-b))
, где
b = np.asarray([0.5,1.0,1.5])
У меня есть все необходимые вычисления, но мне нужен rdd
в виде столбца в df_vector
. Как мне это сделать?