📅  最后修改于: 2023-12-03 14:47:43.951000             🧑  作者: Mango
StringIndexer是Pyspark中的一个转换器(Transformer),用于将字符串类型的数据转换为数字类型。StringIndexer还可以对数据中出现过的字符串类型进行编号,这些编号可以很容易的被其他机器学习算法使用。本文将会介绍如何使用StringIndexer来将字符串类型的数据进行编号和转换。
在使用StringIndexer之前,需要先安装pyspark包(如果尚未安装)。
!pip install pyspark
在安装完成后,我们需要引入以下库:
from pyspark.ml.feature import StringIndexer
from pyspark.sql.functions import col
为了更好地理解StringIndexer的工作原理,我们需要准备一些数据。
data = [('apple',),
('orange',),
('banana',),
('apple',),
('pear',),
('banana',),
('orange',)]
df = spark.createDataFrame(data, ['fruit'])
df.show()
这将生成一个DataFrame表格,其中包含了一列字符串类型的数据(水果)。
| fruit |
|--------|
| apple |
| orange |
| banana |
| apple |
| pear |
| banana |
| orange |
现在我们可以使用StringIndexer将DataFrame表格中的字符串类型数据转换为数字类型。下面是如何使用StringIndexer进行转换的代码:
indexer = StringIndexer(inputCol='fruit', outputCol='fruit_index')
model = indexer.fit(df)
indexed = model.transform(df)
indexed.show()
通过运行上述代码,我们将原始的DataFrame表格转换为一个新的表格,其中添加了一个名称为“fruit_index”的新列。此列包含了从0开始编号的数字类型数据。
| fruit | fruit_index |
|--------|-------------|
| apple | 0.0 |
| orange | 2.0 |
| banana | 1.0 |
| apple | 0.0 |
| pear | 3.0 |
| banana | 1.0 |
| orange | 2.0 |
现在我们可以看到每个水果都被数字索引所代替。
你可能会想知道如何将数字类型的数据再次转换为字符串类型。要完成此操作,我们需要使用IndexToString转换器。
from pyspark.ml.feature import IndexToString
converter = IndexToString(inputCol='fruit_index', outputCol='fruit_string')
converted = converter.transform(indexed)
converted.show()
通过使用IndexToString转换器,我们可以将数字类型的数据再次转换为字符串类型。这在某些情况下非常有用。
| fruit | fruit_index | fruit_string |
|--------|-------------|--------------|
| apple | 0.0 | apple |
| orange | 2.0 | orange |
| banana | 1.0 | banana |
| apple | 0.0 | apple |
| pear | 3.0 | pear |
| banana | 1.0 | banana |
| orange | 2.0 | orange |
现在我们可以看到新的表格已经将数字类型的数据转换为了字符串类型。
在本文中,我们介绍了StringIndexer和IndexToString转换器,并演示了如何使用这些转换器进行字符串类型和数字类型之间的转换。我们还了解了如何使用Spark DataFrame表格展示数据,并将数据导入数据框中。
有了这些知识,你可以更好地使用Pyspark进行机器学习,并更好地处理字符串类型数据。