Apache Spark-UDF似乎无法与spark-submit一起使用 [英] Apache Spark - UDF doesn't seem to work with spark-submit

查看:170
本文介绍了Apache Spark-UDF似乎无法与spark-submit一起使用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法使UDF与spark-submit一起使用.使用spark-shell时我没有任何问题.

I am unable to get UDF to work with spark-submit. I don't have any problem while using spark-shell.

请在下面查看错误消息,示例代码,build.sbt和运行程序的命令

Please see below, the Error message, sample code, build.sbt and the command to run the program

将感谢所有帮助! -尊敬的Venki

Will appreciate all the help! - Regards, Venki

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版本不匹配发生在某处.

When you see a NoSuchMethod or ClassNotFound regarding a scala library (in this case, scala.reflect.api.JavaUniverse.runtimeMirror), this usually means a mismatch of scala versions happened somewhere.

您使用的是spark 1.6.1,它是为scala 2.10预先构建的,但是您的项目是scala 2.11.7,因此会出现错误.

You're using spark 1.6.1, which comes pre-built for scala 2.10, but your project is scala 2.11.7, hence the error.

您的选择是:

  1. 将项目降级到2.10
  2. 构建具有2.11支持的Spark 1.6.1(来自源代码)
  3. 使用带有2.11支持的内置Spark 2.0

这篇关于Apache Spark-UDF似乎无法与spark-submit一起使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆