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)



