在Pyspark中使用Stringindexer时如何将列名作为变量放置

问题描述

{simpleDF.columns 
 #output :['color','lab','value1','value2']
 indexer = simpleDF.select('lab')

 from pyspark.ml.feature import StringIndexer
 # Let us create an object of the class StringIndexer
 lblindexer=StringIndexer().setInputCol(indexer).setoutputCol("LabelIndexed")
 idxRes=lblindexer.fit(simpleDF).transform(simpleDF)

 idxRes.show(5)}

这行代码运行良好,但我希望它更通用

 #lblindexer=StringIndexer().setInputCol('lab').setoutputCol("LabelIndexed")

出现错误: 类型错误:为参数“inputCol”提供的参数值无效。无法将 转换为字符串类型

解决方法

使用输入列的列名,而不是数据框:

lblindexer=StringIndexer().setInputCol('lab').setOutputCol("LabelIndexed")

如果你想使用一个变量,

indexer = 'lab'
lblindexer=StringIndexer().setInputCol(indexer).setOutputCol("LabelIndexed")