Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

scala code throw exception in spark

I am new to scala and spark. Today I tried to write some code, and let it run on spark, but got an exception.

this code work in local 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
  }

but when I put this code into spark, it throw an exception says:

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)

if I comment out the below code, the code work in spark

for (i <- 1 to size)

can someone explain why, please.

like image 298
Chan Avatar asked Jan 01 '15 06:01

Chan


People also ask

How to throw an exception in Scala?

When the program's logic is probable to throw an exception, it has to be declared that such an exception might occur in the code, and a method has to be declared that catches the exception and works upon it. How to throw exception? In Scala, the throw keyword is used to throw an exception and catch it.

How to handle exceptions in a spark dataframe?

In Spark 2.1.0, we can have the following code, which would handle the exceptions and append them to our accumulator. We use Try - Success/Failure in the Scala way of handling exceptions. We cannot have Try [Int] as a type in our DataFrame, thus we would have to handle the exceptions and add them to the accumulator.

What is @throws in Scala?

@throws is also a way to provide the method signature for ‘throws’ to those who work with Java Programming Language. Java would have the following code for this: 4. More On Throw Keyword in Scala

Can a method throw more than one code in Scala?

But a method may throw more than one code. To mention all of these, we use multiple annotations in Scala. @throws is also a way to provide the method signature for ‘throws’ to those who work with Java Programming Language. Java would have the following code for this:


1 Answers

Thanks @Imm, I have solved this issue. The root cause is that my local scala is 2.11.4, but my spark cluster is running at 1.2.0 version. The 1.2 version of spark was compiled by 2.10 scala.

So the solution is compile local code by 2.10 scala, and upload the compiled jar into spark. Everything works fine.

like image 199
Chan Avatar answered Oct 07 '22 07:10

Chan