首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spark MLlib 0.91 org.jblas.DoubleMatrix错误

Spark MLlib 0.91 org.jblas.DoubleMatrix错误
EN

Stack Overflow用户
提问于 2014-09-20 19:33:45
回答 1查看 947关注 0票数 5

我在DSE上使用spark 0.91MLlib 0.91

当尝试在独立模式下运行以下代码时

代码语言:javascript
复制
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)

我得到了这个错误:

代码语言:javascript
复制
    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)

只有在尝试运行独立应用程序时才会发生这种情况。它适用于spark shell (dse spark)。有什么想法吗?

更新:

当我在REPL上创建一个对象时,getClassLoader返回:

代码语言:javascript
复制
scala>  new org.jblas.DoubleMatrix().getClass().getClassLoader()
res3: ClassLoader = ModuleClassLoader:Analytics

但是当我在独立模式下运行(使用spark-class)时,它返回

代码语言:javascript
复制
new org.jblas.DoubleMatrix().getClass().getClassLoader():
class= SystemClassLoader

也许这是一个提示。

我使用SBT生成jar并使用spark-class提交它。以下是配置

代码语言:javascript
复制
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演示的配置使用ant构建和部署,但我再次遇到相同的错误

EN

回答 1

Stack Overflow用户

发布于 2014-09-30 21:01:26

这看起来确实是一个类加载问题。特别是,我相信你正在使用this bug,它已经在1.0中修正了。

您不能将一个类加载器加载的类的对象强制转换到另一个类加载器中。

您可能会通过手动更改上下文类加载器找到解决方案。它要求您可以实际获得对适当类加载器的引用,这在您的情况下可能是可能的,也可能是不可能的。类似于:

代码语言:javascript
复制
Thread.currentThread().setContextClassloader(...)

但是,由于我对DSE一无所知,我必须向您推荐这篇文章:http://www.datastax.com/dev/blog/classloading-in-dse-analytics

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25948307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档