我使用spark 0.91
與MLlib 0.91
上DSE星火MLlib 0.91 org.jblas.DoubleMatrix錯誤
當試圖在獨立模式
val parsedData = sc.parallelize((1 to 1000).
map {
line =>
LabeledPoint(0.0, Array(0.0, 0.4, 0.3))
})
val numIterations = 2
val model = LinearRegressionWithSGD.train(parsedData, numIterations)
我得到這個錯誤運行下面的代碼:
14/09/20 14:28:37 ERROR OneForOneStrategy: org.jblas.DoubleMatrix cannot be cast to org.jblas.DoubleMatrix
java.lang.ClassCastException: org.jblas.DoubleMatrix cannot be cast to org.jblas.DoubleMatrix
at org.apache.spark.mllib.optimization.GradientDescent$$anonfun$runMiniBatchSGD$1$$anonfun$2.apply(GradientDescent.scala:150)
at org.apache.spark.mllib.optimization.GradientDescent$$anonfun$runMiniBatchSGD$1$$anonfun$2.apply(GradientDescent.scala:150)
at org.apache.spark.rdd.RDD$$anonfun$6.apply(RDD.scala:677)
at org.apache.spark.rdd.RDD$$anonfun$6.apply(RDD.scala:674)
at org.apache.spark.scheduler.JobWaiter.taskSucceeded(JobWaiter.scala:56)
at org.apache.spark.scheduler.DAGScheduler.handleTaskCompletion(DAGScheduler.scala:846)
at org.apache.spark.scheduler.DAGScheduler.processEvent(DAGScheduler.scala:601)
只有在嘗試運行獨立應用程序時纔會發生這種情況。它適用於火花外殼(dse spark)。 任何想法?
更新:
當我在REPL創建一個對象的getClassLoader返回:
scala> new org.jblas.DoubleMatrix().getClass().getClassLoader()
res3: ClassLoader = ModuleClassLoader:Analytics
但是,當我在獨立模式下運行(與火花級)返回
new org.jblas.DoubleMatrix().getClass().getClassLoader():
class= SystemClassLoader
也許這是一個暗示。
我使用SBT來生成jar並使用spark-class進行提交。下面是配置
name := "analytics"
version := "1.0"
scalaVersion := "2.10.3"
unmanagedJars in Compile ++=
Attributed.blankSeq((file("./dse/lib/") * "*.jar").get)
unmanagedJars in Compile ++=
Attributed.blankSeq((file("./dse/resources/spark/lib/") * "*.jar").get)
unmanagedJars in Compile ++=
Attributed.blankSeq((file("./dse/resources/cassandra/lib/") * "*.jar").get)
unmanagedJars in Runtime ++=
Attributed.blankSeq((file("./dse/resources/hadoop/") * "*.jar").get)
unmanagedJars in Runtime ++=
Attributed.blankSeq((file("./dse/resources/hadoop/lib/") * "*.jar").get)
unmanagedJars in Compile ++=
Attributed.blankSeq((file("./dse/resources/driver/lib/") * "*.jar").get)
更新2: 使用的DSE演示的配置,構建和部署螞蟻但同樣我面對了同樣的錯誤
這讓我不知道你們是否是肯定的Scala編譯器,JVM和您正在構建包的Spark/mllib庫與您的獨立Spark安裝中的相同。此外,如果有幫助,我會指出在後續的Spark版本中,使用org.jblas.DoubleMatrix從GradientDescent代碼中消失(儘管不是來自mllib的其餘部分) - 從1.0.0開始。 – 2014-09-23 05:26:21
@SpiroMichaylov一切都是一樣的。配置(從sc.getConf複製)scala版本和JMV。也使用與REPL完全相同的庫。也許repl在本地運行,問題在於分佈式工作人員。 – weakwire 2014-09-27 21:53:16
@SpiroMichaylov請檢查更新 – weakwire 2014-09-28 09:09:08