2017-08-03 107 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,這是失敗的。要排除故障,我會嘗試打印出行中的所有內容並查看內容。有時候,當你加載數據時,列被編入的類型可能會令人驚訝。

相關問題