2017-08-03 106 views
-1

我正在使用Spark MLlib的DecisionTreeModel进行预测。ClassCastException [C不能转换为[Ljava.lang.Object;

def predict(sc: SparkContext) : (Row => Row) = { 
     val model = DecisionTreeModel.load(sc,"hdfs://invlxiisqa09.informatica.com:8020/user/cloudqa/anuja/myDecisionTreeClassificationModel") 
    (str:Row)=> { 
     val mldata5 = Vectors.dense(str.get(0).asInstanceOf[Int],str.get(1).asInstanceOf[Int], str.get(2).asInstanceOf[Int] , str.get(3).asInstanceOf[Int], str.get(4).asInstanceOf[Int], str.get(5).asInstanceOf[Int], str.get(6).asInstanceOf[Int], str.get(7).asInstanceOf[Int]) 
     val prediction = Row.fromSeq(String.valueOf(model.predict(mldata5)).toSeq) 
     prediction 
    }   
} 

当我发送以下数据

[12.0,0.0,1620.0,1850.0,6.0,270.0,234.0,270.0] 

我得到了ClassCastException在创建行。

有人能指出我错在哪里吗?

堆栈跟踪是

java.lang.ClassCastException: [C cannot be cast to [Ljava.lang.Object; 
at org.apache.spark.sql.Row$.fromSeq(Row.scala:53) 
at com.informatica.bootstrap.InfaStreaming$$anonfun$predicts$1.apply(InfaStreaming.scala:256) 
at com.informatica.bootstrap.InfaStreaming$$anonfun$predicts$1.apply(InfaStreaming.scala:253) 
at scala.collection.Iterator$$anon$11.next(Iterator.scala:409) 
at scala.collection.Iterator$$anon$11.next(Iterator.scala:409) 
at scala.collection.Iterator$$anon$11.next(Iterator.scala:409) 
at scala.collection.Iterator$$anon$11.next(Iterator.scala:409) 
at scala.collection.Iterator$$anon$11.next(Iterator.scala:409) 
at scala.collection.Iterator$$anon$11.next(Iterator.scala:409) 
at scala.collection.Iterator$$anon$11.next(Iterator.scala:409) 
at com.informatica.bootstrap.InfaStreaming$$anonfun$jsonPayloadGenerator$1$$anon$3.next(InfaStreaming.scala:946) 
at com.informatica.bootstrap.InfaStreaming$$anonfun$jsonPayloadGenerator$1$$anon$3.next(InfaStreaming.scala:943) 
at scala.collection.Iterator$$anon$11.next(Iterator.scala:409) 
at scala.collection.convert.Wrappers$IteratorWrapper.next(Wrappers.scala:31) 
at com.informatica.adapter.streaming.kafka.common.KafkaOperations.sendMessagesBinary(KafkaOperations.java:308) 
at com.informatica.bootstrap.InfaStreaming$$anonfun$writeToKafka$2$$anonfun$apply$26.apply(InfaStreaming.scala:274) 
at com.informatica.bootstrap.InfaStreaming$$anonfun$writeToKafka$2$$anonfun$apply$26.apply(InfaStreaming.scala:272) 
at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$29.apply(RDD.scala:925) 
at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$29.apply(RDD.scala:925) 
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1944) 
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1944) 
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87) 
at org.apache.spark.scheduler.Task.run(Task.scala:99) 
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:282) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at java.lang.Thread.run(Thread.java:745) 
+0

可以发布完整的堆栈跟踪吗? – aclokay

+0

java.lang.ClassCastException:[C不能转换为[Ljava.lang.Object; \t at org.apache.spark.sql.Row $ .fromSeq(Row.scala:53) – shivali

回答

0

的Java ClassCastException异常

一个Java ClassCastException异常是当你尝试不当从一种类型转换类到另一个可能发生的异常。 ...因为一个字符串不能直接转换为一个整数 - 一个整数不是一种字符串类型 - 在java中抛出一个ClassCastException异常。

+0

谢谢。但在这里我不会将字符串转换为整数。在创建Row期间抛出异常 – shivali

0

这种转换字符串到整数:

高清tryToInt(S:字符串)=尝试(s.toInt).toOption

在你的代码可以尝试应用这样的... ...

VAL预测= Row.fromSeq(tryToInt(S:字符串)=尝试((model.predict(mldata5.toInt))toSeq)

0

东西你行不是int,而当。你试图把它转换为int,这是失败的。要排除故障,我会尝试打印出行中的所有内容并查看内容。有时候,当你加载数据时,列被编入的类型可能会令人惊讶。

相关问题