StringIndexer转换器可以把一列类别型的特征(或标签)进行编码,使其数值化。
? 索引的范围从0开始,该过程可以使得相应的特征索引化,使得某些无法接受类别型特征的算法可以使用。
并提高诸如决策树等机器学习算法的效率。
? 索引构建的顺序为标签的频率,优先编码频率较大的标签,所以出现频率最高的标签为0号。 如果输入的是数值型的,我们会把它转化成字符型,然后再对其进行编码。
? 返回的新列的类型为:double
代码如下:
01.生成对象
from pyspark.sql import SparkSession
from pyspark.ml.feature import StringIndexer
spark = SparkSession.builder.config("spark.driver.host","192.168.1.4")\
.config("spark.ui.showConsoleProgress","false")\
.appName("StringIndexerT").master("local[*]").getOrCreate()
02.模拟数据
from pyspark.sql.types import Row
data = spark.createDataFrame([
Row("hadoop"),
Row("spark"),
Row("flink"),
Row("kafka"),
Row("java"),
Row("flink"),
Row("kafka"),
Row("python")
],["name"])
data.show()
? 输出结果:
+------+
| name|
+------+
|hadoop|
| spark|
| flink|
| kafka|
| java|
| flink|
| kafka|
|python|
+------+
03.使用StringIndexer转换器,并查看结果:
stringIndexer = StringIndexer(inputCol=data.columns[0],outputCol="ADD")
model = stringIndexer.fit(data)
outdata = model.transform(data)
outdata.show()
? 输出结果:
+------+---+
| name|ADD|
+------+---+
|hadoop|3.0|
| spark|4.0|
| flink|0.0|
| kafka|1.0|
| java|2.0|
| flink|0.0|
| kafka|1.0|
|python|5.0|
+------+---+
04.查看结果的类型:
outdata.printSchema()
spark.stop()
? 输出结果:
root
|-- name: string (nullable = true)
|-- ADD: double (nullable = false)
|