Apache spark 使用ApacheSparkML,如何转换(用于预测)一个不';你没有标签吗?

Apache spark 使用ApacheSparkML,如何转换(用于预测)一个不';你没有标签吗?,apache-spark,apache-spark-mllib,apache-spark-ml,Apache Spark,Apache Spark Mllib,Apache Spark Ml,我确信我对Spark ML管道的理解存在差距 我有一个针对一组数据进行训练的管道,其模式为“label”、“comment”(两个字符串)。我的管道转换“label”,添加“indexedLabel”,并通过标记化将“comment”矢量化,然后HashingTF(以“vectoriazedcomment”结尾)。管道以logisticsregression结束,标签列为“indexedLabel”,特征列为“vectoriazedcomment” 而且效果很好!我可以适应我的管道,得到一个管道

我确信我对Spark ML管道的理解存在差距

我有一个针对一组数据进行训练的管道,其模式为“label”、“comment”(两个字符串)。我的管道转换“label”,添加“indexedLabel”,并通过标记化将“comment”矢量化,然后
HashingTF
(以“vectoriazedcomment”结尾)。管道以
logisticsregression
结束,标签列为“indexedLabel”,特征列为“vectoriazedcomment”

而且效果很好!我可以适应我的管道,得到一个管道模型,可以整天用“标签”、“注释”转换数据集! 然而,我的目标是能够抛出只包含“注释”的数据集,因为“标签”仅用于训练模型


我相信我在理解管道预测的工作原理方面存在差距——有人能为我指出这一点吗?

标签的转换可以在管道之外完成(即之前)。该标签仅在培训期间需要,在实际使用管道/模型期间不需要。通过在管道中执行标签转换,任何数据帧都需要一个不需要的标签列

小例子:

val indexer=新的StringIndexer()
.setInputCol(“标签”)
.setOutputCol(“indexedLabel”)
val df2=索引器.fit(df).transform(df)
//与其他阶段一起创建管道,并使用df2进行调整

或者,您可以有两条单独的管道。一个包含训练期间使用的标签转换,另一个不包含标签转换。确保其他阶段在两个管道中引用相同的对象

val indexer=新的StringIndexer()
.setInputCol(“标签”)
.setOutputCol(“indexedLabel”)
//创建要素变换器并添加到管道
val pipelineTraining=new Pipeline().setStages(数组(索引器等))
val pipelineUsage=new Pipeline().setStages(数组(…))