Apache spark 如何使用StringIndexer生成数值变量?

Apache spark 如何使用StringIndexer生成数值变量?,apache-spark,apache-spark-mllib,apache-spark-ml,Apache Spark,Apache Spark Mllib,Apache Spark Ml,我希望使用StringIndexer对我的数据集中的1000多个类别进行排序,生成一个表示相对频率的索引。然后我可以使用这个索引作为我的模型的数字特征。不幸的是,StringIndex默认情况下会存储一些元数据,将索引标记为分类索引,这迫使我的模型将索引用作索引 是否有某种方法可以禁用此功能,以便将索引变量用作数字变量 编辑:我使用字符串索引器作为ML管道中的一个阶段,因此解决方案需要避免直接操作数据帧。此外,我将保存和加载此管道,因此定制数据转换器可能不切实际。我怀疑这是不可能的,因为Spar

我希望使用
StringIndexer
对我的数据集中的1000多个类别进行排序,生成一个表示相对频率的索引。然后我可以使用这个索引作为我的模型的数字特征。不幸的是,
StringIndex
默认情况下会存储一些元数据,将索引标记为分类索引,这迫使我的模型将索引用作索引

是否有某种方法可以禁用此功能,以便将索引变量用作数字变量


编辑:我使用字符串索引器作为ML管道中的一个阶段,因此解决方案需要避免直接操作数据帧。此外,我将保存和加载此管道,因此定制数据转换器可能不切实际。我怀疑这是不可能的,因为Spark目前正在编写。

您可以为数据编制索引,然后替换元数据。假设您的数据如下所示:

导入spark.implicits_
导入org.apache.spark.ml.feature.StringIndexer
val indexer=new StringIndexer().setInputCol(“原始”).setOutputCol(“索引”)
val df=序列(“a”、“b”、“b”、“c”、“c”)。toDF(“原始”)
val indexed=indexer.fit(df).transform(df)
我们需要一个
数字属性

import org.apache.spark.ml.attribute.numericatAttribute
和元数据:

val meta=numericatAttribute.defaultAttr.withName(“索引”).toMetadata
最后,我们可以使用
as
方法替换元数据:

indexed.withColumn(“indexed”和$“indexed”.as(“indexed”,meta))

您可以为数据编制索引,然后替换元数据。假设您的数据如下所示:

导入spark.implicits_
导入org.apache.spark.ml.feature.StringIndexer
val indexer=new StringIndexer().setInputCol(“原始”).setOutputCol(“索引”)
val df=序列(“a”、“b”、“b”、“c”、“c”)。toDF(“原始”)
val indexed=indexer.fit(df).transform(df)
我们需要一个
数字属性

import org.apache.spark.ml.attribute.numericatAttribute
和元数据:

val meta=numericatAttribute.defaultAttr.withName(“索引”).toMetadata
最后,我们可以使用
as
方法替换元数据:

indexed.withColumn(“indexed”和$“indexed”.as(“indexed”,meta))