字段“features”不存在。SparkML。

16

我正在尝试使用Zeppelin在Spark ML中构建模型。 我对这个领域不熟悉,希望得到一些帮助。我认为我需要为列设置正确的数据类型,并将第一列设置为标签。任何帮助都将不胜感激,谢谢。

val training = sc.textFile("hdfs:///ford/fordTrain.csv")
val header = training.first
val inferSchema = true  
val df = training.toDF

val lr = new LogisticRegression()
.setMaxIter(10)
.setRegParam(0.3)
.setElasticNetParam(0.8)

 val lrModel = lr.fit(df)

// Print the coefficients and intercept for multinomial logistic regression
println(s"Coefficients: \n${lrModel.coefficientMatrix}")
println(s"Intercepts: ${lrModel.interceptVector}")

我使用的CSV文件片段如下:

IsAlert,P1,P2,P3,P4,P5,P6,P7,P8,E1,E2
0,34.7406,9.84593,1400,42.8571,0.290601,572,104.895,0,0,0,

你使用的是哪个版本的Spark? - koiralo
你好,我正在使用Hortonworks沙盒。安装了多个版本的Spark,但未设置SPARK_MAJOR_VERSION。 默认情况下将选择Spark1。默认版本为1.6.3。 - Young4844
我建议你看一下文档中提供的示例,查找适用于你的 Spark 版本。在那里,它指出你可以在 Spark 存储库中的 "examples/src/main/scala/org/apache/spark/examples/ml/LogisticRegressionWithElasticNetExample.scala" 找到完整的示例代码。 - Jeremy
1个回答

17

如您所述,features列缺失。它是包含所有预测变量的向量。您需要使用 VectorAssembler 来创建它。

IsAlert 是标签,其他所有变量(p1、p2 等)都是预测变量,您可以通过以下方式创建 features 列(实际上您可以任意命名而不是 features):

import org.apache.spark.ml.feature.VectorAssembler
import org.apache.spark.ml.linalg.Vectors

//creating features column
val assembler = new VectorAssembler()
  .setInputCols(Array("P1","P2","P3","P4","P5","P6","P7","P8","E1","E2"))
  .setOutputCol("features")


val lr = new LogisticRegression()
  .setMaxIter(10)
  .setRegParam(0.3)
  .setElasticNetParam(0.8)
  .setFeaturesCol("features")   // setting features column
  .setLabelCol("IsAlert")       // setting label column

//creating pipeline
val pipeline = new Pipeline().setStages(Array(assembler,lr))

//fitting the model
val lrModel = pipeline.fit(df)

参考:https://spark.apache.org/docs/latest/ml-features.html#vectorassembler


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接