在简单的示例上无法从Spark ML运行RandomForestClassifier

流行音乐

我尝试RandomForestClassifierspark.ml软件包(1.5.2版)运行实验版。我使用的数据集来自Spark ML指南中LogisticRegression示例

这是代码:

import org.apache.spark.ml.classification.LogisticRegression
import org.apache.spark.ml.param.ParamMap
import org.apache.spark.mllib.linalg.{Vector, Vectors}
import org.apache.spark.sql.Row

// Prepare training data from a list of (label, features) tuples.
val training = sqlContext.createDataFrame(Seq(
  (1.0, Vectors.dense(0.0, 1.1, 0.1)),
  (0.0, Vectors.dense(2.0, 1.0, -1.0)),
  (0.0, Vectors.dense(2.0, 1.3, 1.0)),
  (1.0, Vectors.dense(0.0, 1.2, -0.5))
)).toDF("label", "features")

val rf = new RandomForestClassifier()

val model = rf.fit(training)

这是我得到的错误:

java.lang.IllegalArgumentException: RandomForestClassifier was given input with invalid label column label, without the number of classes specified. See StringIndexer.
    at org.apache.spark.ml.classification.RandomForestClassifier.train(RandomForestClassifier.scala:87)
    at org.apache.spark.ml.classification.RandomForestClassifier.train(RandomForestClassifier.scala:42)
    at org.apache.spark.ml.Predictor.fit(Predictor.scala:90)
    at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:48)
    at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:53)
    at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:55)
    at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:57)
    at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:59)
    at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:61)
    at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:63)
    at $iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:65)
    at $iwC$$iwC$$iwC$$iwC.<init>(<console>:67)
    at $iwC$$iwC$$iwC.<init>(<console>:69)
    at $iwC$$iwC.<init>(<console>:71)
    at $iwC.<init>(<console>:73)
    at <init>(<console>:75)
    at .<init>(<console>:79)
    at .<clinit>(<console>)
    at .<init>(<console>:7)
    at .<clinit>(<console>)
    at $print(<console>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.apache.spark.repl.SparkIMain$ReadEvalPrint.call(SparkIMain.scala:1065)
    at org.apache.spark.repl.SparkIMain$Request.loadAndRun(SparkIMain.scala:1340)
    at org.apache.spark.repl.SparkIMain.loadAndRunReq$1(SparkIMain.scala:840)
    at org.apache.spark.repl.SparkIMain.interpret(SparkIMain.scala:871)
    at org.apache.spark.repl.SparkIMain.interpret(SparkIMain.scala:819)
    at org.apache.spark.repl.SparkILoop.reallyInterpret$1(SparkILoop.scala:857)
    at org.apache.spark.repl.SparkILoop.interpretStartingWith(SparkILoop.scala:902)
    at org.apache.spark.repl.SparkILoop.command(SparkILoop.scala:814)
    at org.apache.spark.repl.SparkILoop.processLine$1(SparkILoop.scala:657)
    at org.apache.spark.repl.SparkILoop.innerLoop$1(SparkILoop.scala:665)
    at org.apache.spark.repl.SparkILoop.org$apache$spark$repl$SparkILoop$$loop(SparkILoop.scala:670)
    at org.apache.spark.repl.SparkILoop$$anonfun$org$apache$spark$repl$SparkILoop$$process$1.apply$mcZ$sp(SparkILoop.scala:997)
    at org.apache.spark.repl.SparkILoop$$anonfun$org$apache$spark$repl$SparkILoop$$process$1.apply(SparkILoop.scala:945)
    at org.apache.spark.repl.SparkILoop$$anonfun$org$apache$spark$repl$SparkILoop$$process$1.apply(SparkILoop.scala:945)
    at scala.tools.nsc.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:135)
    at org.apache.spark.repl.SparkILoop.org$apache$spark$repl$SparkILoop$$process(SparkILoop.scala:945)
    at org.apache.spark.repl.SparkILoop.process(SparkILoop.scala:1059)
    at org.apache.spark.repl.Main$.main(Main.scala:31)
    at org.apache.spark.repl.Main.main(Main.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:674)
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:180)
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:205)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:120)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

当函数尝试计算列中的类数时,将出现问题"label"

正如您在RandomForestClassifier源代码的第84行看到的那样,该DataFrame.schema函数使用参数调用该函数"label"此调用可以,并返回一个org.apache.spark.sql.types.StructField对象。然后,该函数org.apache.spark.ml.util.MetadataUtils.getNumClasses被调用。由于它没有返回预期的输出,因此在第87行引发了异常。

快速浏览一下getNumClasses源代码后,我认为该错误是由于colmun"label"的数据都不BinaryAttribute事实所致NominalAttribute但是,我不知道如何解决此问题。

我的问题:

我该如何解决这个问题?

非常感谢您阅读我的问题并为您提供帮助!

以利亚

首先修复导入以消除歧义

import org.apache.spark.ml.classification.RandomForestClassifier
import org.apache.spark.ml.feature.{StringIndexer, VectorIndexer}
import org.apache.spark.ml.{Pipeline, PipelineStage}
import org.apache.spark.ml.linalg.Vectors

我将使用您使用的相同数据:

val training = sqlContext.createDataFrame(Seq(
  (1.0, Vectors.dense(0.0, 1.1, 0.1)),
  (0.0, Vectors.dense(2.0, 1.0, -1.0)),
  (0.0, Vectors.dense(2.0, 1.3, 1.0)),
  (1.0, Vectors.dense(0.0, 1.2, -0.5))
)).toDF("label", "features")

然后创建管道阶段:

val stages = new scala.collection.mutable.ArrayBuffer[PipelineStage]()
  1. 对于分类,请重新索引类:
val labelIndexer = new StringIndexer().setInputCol("label").setOutputCol("indexedLabel").fit(training)
  1. 使用VectorIndexer识别类别特征
val featuresIndexer = new VectorIndexer().setInputCol("features").setOutputCol("indexedFeatures").setMaxCategories(10).fit(training)
stages += featuresIndexer

val tmp = featuresIndexer.transform(labelIndexer.transform(training))
  1. 学习随机森林
val rf = new RandomForestClassifier().setFeaturesCol(featuresIndexer.getOutputCol).setLabelCol(labelIndexer.getOutputCol)

stages += rf
val pipeline = new Pipeline().setStages(stages.toArray)

// Fit the Pipeline
val pipelineModel = pipeline.fit(tmp)

val results = pipelineModel.transform(training)

results.show

//+-----+--------------+---------------+-------------+-----------+----------+
//|label|      features|indexedFeatures|rawPrediction|probability|prediction|
//+-----+--------------+---------------+-------------+-----------+----------+
//|  1.0| [0.0,1.1,0.1]|  [0.0,1.0,2.0]|   [1.0,19.0]|[0.05,0.95]|       1.0|
//|  0.0|[2.0,1.0,-1.0]|  [1.0,0.0,0.0]|   [17.0,3.0]|[0.85,0.15]|       0.0|
//|  0.0| [2.0,1.3,1.0]|  [1.0,3.0,3.0]|   [14.0,6.0]|  [0.7,0.3]|       0.0|
//|  1.0|[0.0,1.2,-0.5]|  [0.0,2.0,1.0]|   [1.0,19.0]|[0.05,0.95]|       1.0|
//+-----+--------------+---------------+-------------+-----------+----------+

参考:关于第1步和第2步。对于那些需要有关功能转换器的更多详细信息的人,我建议您在此处阅读官方文档

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法运行Spark CassandraTest示例

来自分类Dev

无法运行Spark CassandraTest示例

来自分类Dev

无法使用SBT运行简单的Akka示例

来自分类Dev

无法运行简单的提升网站示例

来自分类Dev

无法从Python运行Apache Spark的Pi示例

来自分类Dev

Qt示例无法在Ubuntu上运行

来自分类Dev

无法在Spark上运行TensorFlow

来自分类Dev

在 Yarn 上运行 Spark 官方 python 机器学习示例失败

来自分类Dev

尝试运行简单的Spark Streaming Kafka示例时遇到错误

来自分类Dev

无法在iPhone上运行示例heathkit项目FitStoreandRetrieveHealthKitData

来自分类Dev

无法在物理设备上运行示例Android Wear应用

来自分类Dev

无法在Android Eclipse模拟器上运行openCV示例

来自分类Dev

无法在Mac上使用Quantlib运行示例代码

来自分类Dev

无法在Ubuntu 12.04上运行Spark 2.6.3

来自分类Dev

无法在Apache Spark集群上运行sparkPi

来自分类Dev

无法在EMR上运行Java Spark

来自分类Dev

无法在Mac上以独立模式运行Spark

来自分类Dev

无法运行一个简单的枕头示例(找不到arial.pil)

来自分类Dev

无法在本地计算机上运行一个简单的angular-bootstrap示例

来自分类Dev

运行简单的TensorFlow代码示例时,无法附加到任何Graphcore IPU设备

来自分类Dev

无法运行一个简单的枕头示例(找不到arial.pil)

来自分类Dev

无法在本地计算机上运行一个简单的angular-bootstrap示例

来自分类Dev

无法运行LodePNG示例

来自分类Dev

在 Spark 中的 map 函数内运行 ML 算法

来自分类Dev

NSTimer()-timer.invalidate无法在简单的秒表上运行吗?

来自分类Dev

PyInstaller无法在简单的HelloWorld程序上运行

来自分类Dev

PyInstaller无法在简单的HelloWorld程序上运行

来自分类Dev

无法通过Eclipse在Ant上运行简单的JUnit测试

来自分类Dev

简单动画无法在iOS7上运行

Related 相关文章

  1. 1

    无法运行Spark CassandraTest示例

  2. 2

    无法运行Spark CassandraTest示例

  3. 3

    无法使用SBT运行简单的Akka示例

  4. 4

    无法运行简单的提升网站示例

  5. 5

    无法从Python运行Apache Spark的Pi示例

  6. 6

    Qt示例无法在Ubuntu上运行

  7. 7

    无法在Spark上运行TensorFlow

  8. 8

    在 Yarn 上运行 Spark 官方 python 机器学习示例失败

  9. 9

    尝试运行简单的Spark Streaming Kafka示例时遇到错误

  10. 10

    无法在iPhone上运行示例heathkit项目FitStoreandRetrieveHealthKitData

  11. 11

    无法在物理设备上运行示例Android Wear应用

  12. 12

    无法在Android Eclipse模拟器上运行openCV示例

  13. 13

    无法在Mac上使用Quantlib运行示例代码

  14. 14

    无法在Ubuntu 12.04上运行Spark 2.6.3

  15. 15

    无法在Apache Spark集群上运行sparkPi

  16. 16

    无法在EMR上运行Java Spark

  17. 17

    无法在Mac上以独立模式运行Spark

  18. 18

    无法运行一个简单的枕头示例(找不到arial.pil)

  19. 19

    无法在本地计算机上运行一个简单的angular-bootstrap示例

  20. 20

    运行简单的TensorFlow代码示例时,无法附加到任何Graphcore IPU设备

  21. 21

    无法运行一个简单的枕头示例(找不到arial.pil)

  22. 22

    无法在本地计算机上运行一个简单的angular-bootstrap示例

  23. 23

    无法运行LodePNG示例

  24. 24

    在 Spark 中的 map 函数内运行 ML 算法

  25. 25

    NSTimer()-timer.invalidate无法在简单的秒表上运行吗?

  26. 26

    PyInstaller无法在简单的HelloWorld程序上运行

  27. 27

    PyInstaller无法在简单的HelloWorld程序上运行

  28. 28

    无法通过Eclipse在Ant上运行简单的JUnit测试

  29. 29

    简单动画无法在iOS7上运行

热门标签

归档