簡體   English   中英

Apache Spark - UDF似乎不適用於spark-submit

[英]Apache Spark - UDF doesn't seem to work with spark-submit

我無法讓UDF與spark-submit一起工作。 使用spark-shell時我沒有任何問題。

請參閱下面的錯誤消息,示例代碼,build.sbt以及運行該程序的命令

將感謝所有的幫助! - 問候,Venki


錯誤消息:(第20行是定義UDF的位置)

Exception in thread "main" java.lang.NoSuchMethodError:
scala.reflect.api.JavaUniverse.runtimeMirror(Ljava/lang/ClassLoader;)
Lscala/reflect/api/JavaUniverse$JavaMirror;
at TryUDFApp$.main(TryUDFApp.scala:20)

碼:

/* TryUDFApp.scala */

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.sql._
import org.apache.spark.sql.functions._
import org.apache.spark.sql.types._

object TryUDFApp {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("Simple Application")
val sc = new SparkContext(conf)
// print "Hello world"
println("Hello World -- I am trying to use UDF!")
// Create a UDF
val tryUDF = udf { (arg1: String, arg2: String) => arg2 + arg1 }
}
}

build.sbt

name := "TryUDFApp Project"
version := "1.0"
scalaVersion := "2.11.7"

libraryDependencies ++= Seq(
    "org.apache.spark" %% "spark-core" % "1.6.1",
    "org.apache.spark" %% "spark-sql"  % "1.6.1"
)

運行代碼的命令:

$SPARK_HOME/bin/spark-submit --class "TryUDFApp" --master local[4] $TADIR/target/scala-2.11/tryudfapp-project_2.11-1.0.jar

echo $SPARK_HOME

/Users/venki/Spark/spark-1.6.1-bin-hadoop2.6

當您看到關於scala庫的NoSuchMethodClassNotFound (在本例中為scala.reflect.api.JavaUniverse.runtimeMirror )時,這通常意味着某些地方出現了scala版本的不匹配。

你正在使用spark 1.6.1,它是為scala 2.10預先構建的,但你的項目是scala 2.11.7,因此出錯。

你的選擇是:

  1. 將項目降級到2.10
  2. 使用2.11支持構建Spark 1.6.1(來自源代碼)
  3. 使用Spark 2.0,它預先構建了2.11支持

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM