2015-01-01 8 views
8

Jestem nowy w scala i iskra. Dzisiaj próbowałem napisać jakiś kod i pozwolić mu działać na iskrze, ale dostałem wyjątek.kod scala wyrzucać wyjątek w iskrze

ta praca kod w lokalnym Scala

import org.apache.commons.lang.time.StopWatch 
import org.apache.spark.{SparkConf, SparkContext} 

import scala.collection.mutable.ListBuffer 
import scala.util.Random 

    def test(): List[Int] = { 
    val size = 100 
    val range = 100 
    var listBuffer = new ListBuffer[Int] // here throw an exception 
    val random = new Random() 
    for (i <- 1 to size) 
     listBuffer += random.nextInt(range) 
    listBuffer.foreach(x => println(x)) 
    listBuffer.toList 
    } 

ale kiedy mogę umieścić ten kod na iskry, to wyjątek mówi:

15/01/01 14:06:17 INFO SparkDeploySchedulerBackend: SchedulerBackend is ready for scheduling beginning after reached minRegisteredResourcesRatio: 0.0 
Exception in thread "main" java.lang.NoSuchMethodError: scala.runtime.ObjectRef.create(Ljava/lang/Object;)Lscala/runtime/ObjectRef; 
    at com.tudou.sortedspark.Sort$.test(Sort.scala:35) 
    at com.tudou.sortedspark.Sort$.sort(Sort.scala:23) 
    at com.tudou.sortedspark.Sort$.main(Sort.scala:14) 
    at com.tudou.sortedspark.Sort.main(Sort.scala) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at org.apache.spark.deploy.SparkSubmit$.launch(SparkSubmit.scala:358) 
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:75) 
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 

gdybym skomentować poniższy kod, praca kod w iskrze

for (i <- 1 to size) 

Czy ktoś może wyjaśnić, dlaczego?

+0

Co to jest linia 35 pliku Sort.scala? Linia 'new ListBuffer'? Wydaje się dziwne, że rzuca wyjątek, który znika po usunięciu na później. Opublikuj pełny przykład, który kończy się niepowodzeniem z iskrą –

+2

Wygląda to na niezgodność wersji scala. Sprawdź, czy wersja używanej scala odpowiada wersji, na którą została zbudowana iskra, oraz wersja klastra, z której korzystasz. – lmm

Odpowiedz

11

Dzięki @Imm, rozwiązałem ten problem. Główną przyczyną jest to, że moją lokalną wersją jest 2.11.4, ale mój klaster jest uruchomiony w wersji 1.2.0. 1.2 wersja iskry została skompilowana przez 2.10 scala.

Rozwiązaniem jest więc skompilowanie kodu lokalnego przez 2.10 scala i załadowanie skompilowanego słoika do iskry. Wszystko dziala.

+0

Czy możesz wyjaśnić, co dokładnie zrobiłeś? Po prostu ustawienie 'scalaVersion: =" 2.10.0 "' z '2.11.4' w pliku .sbt? – gsamaras

+0

Mam to samo pytanie, co @gsamaras zrobił – HappyCoding

+0

@HappyCoding Nie pamiętam, jak to rozwiązałem, ale tutaj jest moje doświadczenie: https://gsamaras.wordpress.com/code/spark-cluster/ – gsamaras

Powiązane problemy