내가 스파크 2.1와 CDH 클러스터를 사용하고 등록하기 없습니다.스파크 2.1 UDF 내가 내 방법 중 하나 내부 UDF를 만든 스칼라 버전 2.11.8</p> <p>와 불꽃 항아리
스파크 셸 복제에서이 방법을 실행하면 아무 문제가 없습니다. 그러나 Spark 제출 명령을 사용하여 Spark Jar에서 메소드를 호출하면 동일한 UDF를 등록 할 수 없습니다. 아래와 같이
name := "newtest"
version := "0.0.2"
scalaVersion := "2.10.5"
sbtPlugin := true
val sparkVersion = "2.1.0"
mainClass in (Compile, run) := Some("com.testPackage.sq.newsparktest.Test")
assemblyJarName in assembly := "newtest.jar"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % sparkVersion % "provided",
"org.apache.spark" %% "spark-sql" % sparkVersion % "provided",
"com.databricks" %% "spark-avro" % "3.2.0",
"org.apache.spark" %% "spark-hive" % "1.5.0" % "provided",
"com.amazonaws" % "aws-java-sdk" % "1.0.002"
)
libraryDependencies +=
"log4j" % "log4j" % "1.2.15" excludeAll(
ExclusionRule(organization = "com.sun.jdmk"),
ExclusionRule(organization = "com.sun.jmx"),
ExclusionRule(organization = "javax.jms")
)
resolvers += "SparkPackages" at "https://dl.bintray.com/spark-packages/maven/"
resolvers += Resolver.url("bintray-sbt-plugins", url("http://dl.bintray.com/sbt/sbt-plugin-releases"))(Resolver.ivyStylePatterns)
assemblyMergeStrategy in assembly := {
case PathList("META-INF", xs @ _*) => MergeStrategy.discard
case x => MergeStrategy.first
}
Plugins.SBT :
val timestamp_diff = (endTime: Timestamp, startTime: Timestamp) => {
(endTime.getTime() - startTime.getTime())
}
logger.info("Function Created") --------> **This works fine**
spark.udf.register("timestamp_diff", timestamp_diff)
-----> **The above command causes error as below**
:
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.0.1")
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.3")
다음은 문제의 원인이되는 코드입니다 아래
는 build.sbt 내용입니다 다음은 오류입니다 : 01 23,232,885,649,263,801,983,210참고 : 앞에서 언급 한 바와 같이 스파크 항아리 이것은 스칼라 버전 문제가 될 것으로 보인다