【问题标题】:Java Spark ML - java.lang.IllegalArgumentException: label does not exist. Available:Java Spark ML - java.lang.IllegalArgumentException:标签不存在。可用的:
【发布时间】:2021-09-24 00:24:45
【问题描述】:

请教一个关于 Spark 异常的小问题。

我有一个非常简单的数据集:

myCoolDataset.show();
        +----------+-----+
        |      time|value|
        +----------+-----+
        |1621900800|   43|
        |1619568000|   41|
        |1620432000|   41|
        |1623974400|   42|
        |1620604800|   41|
      [truncated]
        |1621296000|   42|
        |1620691200|   44|
        |1620345600|   41|
        |1625702400|   44|
        +----------+-----+
        only showing top 20 rows


我想对其执行线性回归,以预测未来时间的下一个

因此,我写了以下内容,这是我尝试过的:

 VectorAssembler       vectorAssembler = new VectorAssembler().setInputCols(new String[]{"time", "value"}).setOutputCol("features");
        Dataset<Row>          vectorData      = vectorAssembler.transform(myCoolDataset);
        LinearRegression      lr              = new LinearRegression(); 
        LinearRegressionModel lrModel         = lr.fit(vectorData); // issue here

不幸的是,在运行时,我得到了这个异常:

Exception in thread "main" java.lang.IllegalArgumentException: label does not exist. Available: time, value, features
        at org.apache.spark.sql.types.StructType.$anonfun$apply$1(StructType.scala:278)
        at scala.collection.immutable.Map$Map3.getOrElse(Map.scala:181)
        at org.apache.spark.sql.types.StructType.apply(StructType.scala:277)
        at org.apache.spark.ml.util.SchemaUtils$.checkNumericType(SchemaUtils.scala:75)
        at org.apache.spark.ml.PredictorParams.validateAndTransformSchema(Predictor.scala:54)
        at org.apache.spark.ml.PredictorParams.validateAndTransformSchema$(Predictor.scala:47)
        at org.apache.spark.ml.regression.LinearRegression.org$apache$spark$ml$regression$LinearRegressionParams$$super$validateAndTransformSchema(LinearRegression.scala:185)

请问是什么原因造成的,请问如何解决?

谢谢

【问题讨论】:

    标签: java apache-spark apache-spark-mllib apache-spark-ml


    【解决方案1】:

    Mllib 回归期望传递包含标签的列的名称(您想要预测的内容)。默认情况下,回归将考虑名为“标签”的列。在您的特定示例中,您没有这样的列。

    我看到了这些解决方案:

    • 您可以在 LinearRegression 实例上调用 setLabelCol("value")。
    • 您还可以修改数据集,将列“value”重命名为“label”(withColumnRenamed 方法)
    • 您可以将“值”列复制到名为“标签”的新列中(withColumn 方法)

    【讨论】:

      猜你喜欢
      • 2016-04-13
      • 2018-01-13
      • 2019-12-09
      • 2016-08-03
      • 1970-01-01
      • 1970-01-01
      • 2019-07-14
      • 2016-07-14
      相关资源
      最近更新 更多