StringIndexer 的使用

StringIndexer对String按频次进行编号

id category categoryIndex
0 a 0.0
1 b 2.0
2 c 1.0
3 a 0.0
4 a 0.0
5 c 1.0

如果转换模型(关系)是基于上面数据得到的 (a,b,c)->(0.0,2.0,1.0),如果用此模型转换category多于(a,b,c)的数据,比如多了d,e,就会遇到麻烦:

id category categoryIndex
0 a 0.0
1 b 2.0
2 d
3 e
4 a 0.0
5 c 1.0

Spark提供了两种处理方式:

StringIndexerModel labelIndexerModel=new StringIndexer().
               setInputCol("label")
               .setOutputCol("indexedLabel")
               //.setHandleInvalid("error")
               .setHandleInvalid("skip")
               .fit(rawData);

(1)默认设置,也就是.setHandleInvalid(“error”):会抛出异常
org.apache.spark.SparkException: Unseen label: d,e
(2).setHandleInvalid(“skip”) 忽略这些label所在行的数据,正常运行,将输出如下结果:

id category categoryIndex
0 a 0.0
1 b 2.0
4 a 0.0
5 c 1.0

你可能感兴趣的:(机器学习-算法)