簡介
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