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 库的 NoSuchMethod
或 ClassNotFound
时(在本例中,scala.reflect.api.JavaUniverse.runtimeMirror
),这通常意味着某处发生了 scala 版本不匹配的情况。
您使用的是为 scala 2.10 预构建的 spark 1.6.1,但您的项目是 scala 2.11.7,因此出现错误。
您的选择是:
- 将您的项目降级到 2.10
- 使用 2.11 支持构建 Spark 1.6.1(来自源代码)
- 使用 Spark 2.0,它预装了 2.11 支持
我无法让 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 库的 NoSuchMethod
或 ClassNotFound
时(在本例中,scala.reflect.api.JavaUniverse.runtimeMirror
),这通常意味着某处发生了 scala 版本不匹配的情况。
您使用的是为 scala 2.10 预构建的 spark 1.6.1,但您的项目是 scala 2.11.7,因此出现错误。
您的选择是:
- 将您的项目降级到 2.10
- 使用 2.11 支持构建 Spark 1.6.1(来自源代码)
- 使用 Spark 2.0,它预装了 2.11 支持