2014-09-20 19 views
5

Tôi đang sử dụng spark 0.91 với MLlib 0.91 trên DSESpark MLlib 0,91 lỗi org.jblas.DoubleMatrix

Khi cố gắng để chạy đoạn mã sau vào chế độ độc

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) 

Tôi nhận được lỗi này:

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) 

Điều này chỉ xảy ra khi cố gắng chạy một ứng dụng độc lập. Nó hoạt động trên vỏ tia lửa (dse spark). Bất kỳ ý tưởng nào?

Cập nhật:

Khi tôi tạo ra một đối tượng trên REPL các getClassLoader trả:

scala> new org.jblas.DoubleMatrix().getClass().getClassLoader() 
res3: ClassLoader = ModuleClassLoader:Analytics 

Nhưng khi tôi chạy trong chế độ độc lập (với spark-class) nó trả

new org.jblas.DoubleMatrix().getClass().getClassLoader(): 
class= SystemClassLoader 

Có lẽ đây là một gợi ý.

Tôi sử dụng SBT để tạo bình và gửi bằng tia lửa. Dưới đây là cấu hình

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) 

Cập nhật 2: sử dụng cấu hình của demo DSE để xây dựng và triển khai với kiến ​​nhưng một lần nữa tôi phải đối mặt với lỗi tương tự

+1

Điều này làm cho tôi tự hỏi liệu bạn chắc chắn rằng trình biên dịch Scala, JVM và Thư viện Spark/mllib mà bạn đang xây dựng gói cũng giống như trong cài đặt Spark độc lập của bạn. Ngoài ra, trong trường hợp nó giúp, tôi sẽ chỉ ra rằng việc sử dụng org.jblas.DoubleMatrix biến mất khỏi mã GradientDescent (mặc dù không phải từ phần còn lại của mllib) trong các bản phát hành Spark tiếp theo - bắt đầu với 1.0.0. –

+0

@SpiroMichaylov mọi thứ đều giống nhau. cấu hình (sao chép từ sc.getConf) phiên bản scala và JMV. Cũng sử dụng cùng một thư viện giống như REPL. có thể repl đang chạy tại địa phương và vấn đề là trên công nhân phân phối .. – weakwire

+0

@SpiroMichaylov xin vui lòng kiểm tra cập nhật – weakwire

Trả lời

1

này thực sự có vẻ là một vấn đề classloading. Đặc biệt, tôi tin rằng bạn đang truy cập this bug, được sửa trong 1.0.

Bạn không thể truyền một đối tượng của một lớp được nạp bởi một trình nạp lớp trong một trình nạp lớp khác.

Có một cơ hội nhỏ bạn có thể tìm thấy giải pháp bằng cách thay đổi trình nạp lớp ngữ cảnh theo cách thủ công. Nó đòi hỏi rằng bạn có thể thực sự có được một tham chiếu đến một trình nạp lớp thích hợp, mà có thể hoặc không thể xảy ra trong trường hợp của bạn. Một cái gì đó như:

Thread.currentThread().setContextClassloader(...) 

Nhưng kể từ khi tôi không biết gì về DSE, tôi sẽ phải giới thiệu bạn đến bài viết này: http://www.datastax.com/dev/blog/classloading-in-dse-analytics

Các vấn đề liên quan