Java Spark ML - java.lang.IllegalArgumentException:标签不存在。可用的:
Java Spark ML - java.lang.IllegalArgumentException: label does not exist. Available:
请问关于 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(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)
请问根本原因是什么,请问如何解决?
谢谢
Mllib 回归期望传递包含标签(您要预测的内容)的列的名称。默认情况下,回归将考虑名为 'label' 的列。在您的特定示例中,您没有这样的列。
我看到了这些解决方案:
- 您可以在 LinearRegression 实例上调用 setLabelCol("value")。
- 您还可以修改数据集,将列 'value' 重命名为 'label'(方法 withColumnRenamed)
- 您可以将列 'value' 复制到名为 'label' 的新列中(方法 withColumn)
请问关于 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(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)
请问根本原因是什么,请问如何解决?
谢谢
Mllib 回归期望传递包含标签(您要预测的内容)的列的名称。默认情况下,回归将考虑名为 'label' 的列。在您的特定示例中,您没有这样的列。
我看到了这些解决方案:
- 您可以在 LinearRegression 实例上调用 setLabelCol("value")。
- 您还可以修改数据集,将列 'value' 重命名为 'label'(方法 withColumnRenamed)
- 您可以将列 'value' 复制到名为 'label' 的新列中(方法 withColumn)