2015-01-01 1 views
8

스칼라와 스파크를 처음 사용합니다. 오늘 나는 코드를 작성하려고했지만 코드가 실행되도록했습니다. 예외가있었습니다.스칼라에서 스칼라 코드 예외가 발생했습니다.

지역 스칼라

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 
    } 

하지만 불꽃이 코드를 넣을 때, 그것은 예외를 throw를이 코드가 작동 말한다 :

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) 

나는 아래의 코드를 주석 경우, 코드 작업 스파크 내

for (i <- 1 to size) 

누군가가 설명 할 수있는 이유는 무엇입니까?

+0

Sort.scala의 35 행은 무엇입니까? '새로운 ListBuffer' 행? 그것은 나중에 예외를 제거 할 때 사라지는 예외를 throw하는 것이 이상하게 보입니다. 스파크로 인해 실패한 예제를 게시하십시오 –

+2

이것은 스칼라 버전이 일치하지 않는 것 같습니다. 사용하고있는 스칼라 버전이 스파크가 만들어진 버전과 현재 실행중인 클러스터의 버전과 일치하는지 확인하십시오. – lmm

답변

11

감사합니다. 흠, 나는이 문제를 해결했습니다. 근본 원인은 내 로컬 스칼라가 2.11.4이지만 내 스파크 클러스터가 1.2.0 버전에서 실행되고 있다는 것입니다. 1.2 버전의 스파크는 2.10 스칼라로 컴파일되었습니다.

따라서 솔루션은 2.10 스칼라로 지역 코드를 컴파일하고 컴파일 된 jar를 spark에 업로드합니다. 모든 것이 잘 작동합니다.

+0

정확히 무엇을했는지 설명 할 수 있습니까? .sbt 파일에서'2.11.4'의'scalaVersion : = "2.10.0"을 설정하기 만하면됩니까? – gsamaras

+0

@gsamaras와 동일한 질문이 있습니다 – HappyCoding

+0

@HappyCoding 어떻게 해결했는지 기억이 나지 않습니다. 그러나 여기 내 경험이 있습니다. https://gsamaras.wordpress.com/code/spark-cluster/ – gsamaras

관련 문제