在应用spark ml管道之前,我一直试图将多个分类列转换为数字。
我了解我们可以使用spark.ml.feature库中提供的StringIndexer
,OneHotEncoder
和VectorAssembler
。
from pyspark.ml.feature import OneHotEncoder, StringIndexer
cat1Indexer = StringIndexer(inputCol="CatFeature1",outputCol="indexedCat1", handleInvalid="skip")
cat1Encoder = OneHotEncoder(inputCol="indexedCat1", outputCol="CatVector1")
fAssembler = VectorAssembler(inputCols=["CatVector1"],outputCol="features")
但是,我的数据中有130个分类列。 如何在所有分类列上应用循环以将它们全部转换为数字,而不是手动遍历每个列,如下所示:
pipeline = Pipeline(stages=[cat1Indexer, cat2Indexer, cat3Indexer,
cat1Encoder, cat2Encoder, cat3Encoder,
fAssembler])