简介
VectorSlicer是一个转换器输入特征向量,输出原始特征向量子集。VectorSlicer接收带有特定索引的向量列,通过对这些索引的值进行筛选得到新的向量集。可接受如下两种索引:
1、整数索引—代表向量中特征的的索引,setIndices()
2、字符串索引—代表向量中特征的名字,这要求向量列有AttributeGroup,因为这根据Attribute来匹配名字字段
指定整数或者字符串类型都是可以的。另外,同时使用整数索引和字符串名字也是可以的。同时注意,至少选择一个特征,不能重复选择同一特征(整数索引和名字索引对应的特征不能叠)。注意如果使用名字特征,当遇到空值的时候将会报错。
输出向量将会首先按照所选的数字索引排序(按输入顺序),其次按名字排序(按输入顺序)。
代码
val spark = SparkSession
.builder()
.appName("learn")
.master("local")
.getOrCreate()
val data = Arrays.asList(
Row(Vectors.sparse(3, Seq((0, -2.0), (1, 2.3)))),
Row(Vectors.dense(-2.0, 2.3, 0.0))
)
val defaultAttr = NumericAttribute.defaultAttr
val attrs = Array("f1", "f2", "f3").map(defaultAttr.withName)
val attrGroup = new AttributeGroup("userFeatures", attrs.asInstanceOf[Array[Attribute]])
val dataset = spark.createDataFrame(data, StructType(Array(attrGroup.toStructField())))
val slicer = new VectorSlicer().setInputCol("userFeatures").setOutputCol("features")
slicer.setIndices(Array(1)).setNames(Array("f3"))
// or slicer.setIndices(Array(1, 2)), or slicer.setNames(Array("f2", "f3"))
val output = slicer.transform(dataset)
output.show(false)
+--------------------+-------------+
|userFeatures |features |
+--------------------+-------------+
|(3,[0,1],[-2.0,2.3])|(2,[0],[2.3])|
|[-2.0,2.3,0.0] |[2.3,0.0] |
+--------------------+-------------+
本文来自 行者小朱 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u012050154/article/details/60766387?utm_source=copy