前言
本文设计scala的数据类型如下:
Seq
Array
mutable.WrappedArray
Vector
struct
涉及方法:
import scala.collection.mutable
import org.apache.spark.ml.linalg.{Vector, Vectors}
import org.apache.spark.ml.feature.VectorAssembler
import org.apache.spark.ml.feature.MinMaxScaler
简述:
spark.sql 获取hive中存储好的特征表格,toDF为该dataFrame增加对应列名,使用VectorAssembler()将相关特征取出集成为输出dataFrame:output(其中新增一列类型为vector的特征向量),定义标准化的对象scaler(如MinMaxScaler()),该对象的ft方法获取output中的标准化参数对象scalerModel,利用scalerModel的transform方法处理output获得scaledData,即标准化特征向量
特征向量可以先保存为hive库表,在这个过程中原本类型为vector的特征向量会被自动转化为struct<type:tinyint,size:int,indices:array<int>,values:array<double>>。需要注意Array和mutable.WrappedArray的区别。
所以在计算特征向量欧氏距离时,可以使用mutable.WrappedArray为传入参数的udf定义方式,取该字段的.values进行具体计算。