2015-07-23 1 views
1

Когда я побежал с искрой подать на следующей простой Спарк программы:NoSuchMethodError для «list.toMap» в искру подать

import org.apache.spark.SparkContext._ 
import org.apache.spark.SparkConf 
import org.apache.spark.rdd.RDD 
import org.apache.spark.SparkContext 
import org.apache.spark._ 
import SparkContext._ 

object TEST2{ 
def main(args:Array[String]) 
{ 
    val conf = new SparkConf().setAppName("TEST") 
    val sc=new SparkContext(conf) 

    val list=List(("aa",1),("bb",2),("cc",3)) 
    val maps=list.toMap 
} 

} 

Я получил java.lang.NoSuchMethodError для линии «VAL карты = list.toMap». Но в искровой скорлупе или просто Скале, он не имеет никаких проблем:

scala> val list=List(("aa",1),("bb",2),("cc",3)) 
list: List[(String, Int)] = List((aa,1), (bb,2), (cc,3)) 

scala> val maps=list.toMap 
maps: scala.collection.immutable.Map[String,Int] = Map(aa -> 1, bb -> 2, cc -> 3) 

Так, чтобы использовать метод «toMap», что я не хватает в искровым представить? Я использую «пакет sbt» для компиляции программы и без проблем. Благодаря!

P.S: файл build.sbt как:

name := "TEST2" 
version := "1.0" 
scalaVersion := "2.11.6" 
+2

Возможно вы можете включить полное сообщение об ошибке в вопрос. –

+1

Я выполнил ваш код против моей искры-1.2.0 и scala 2.10.4, он работал без каких-либо ошибок на spark-submit. попробуйте scalaVersion: = "2.10.4" в sbt. Примечание: до сих пор искровые все версии являются buit против 2.10.4, а не 2.11.x –

+0

Изменено на 2.10.4, но все равно. Вы специально настроили свой CLASSPATH? Но «toMap» является таким базовым методом в scala, довольно странным, что его можно найти с помощью spark-submit. Я тестировал на каждом узле, что этот метод работает нормально. – user1460691

ответ

0

sbt package создает файл JAR, содержащий только ваш проект, а не все его зависимостей.

При использовании spark-submit, вам нужен файл JAR, содержащий проект и все зависимости кроме Спарк библиотек (которые уже предусмотрены установкой Спарк в кластере)

Это uber-JAR могут быть созданы с помощью sbt assembly plugin:

  • В вашей папке проекта, создать файл project/assembly.sbt с этой линией:

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.0")

  • В ваших build.sbt, зависимости Спарка должен быть помечен как "при условии":

    libraryDependencies ++= Seq(
        ... 
        "org.apache.spark" %% "spark-core" % sparkVersion % "provided" 
        ... 
    ) 
    
  • Run sbt assembly, который будет создавать убер-JAR target/scala-2.11/TEST2-1.0.jar

Смежные вопросы