2017-10-06 4 views
1

내가 스파크 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

참고 : 앞에서 언급 한 바와 같이 스파크 항아리 이것은 스칼라 버전 문제가 될 것으로 보인다

답변

0

을 통해 REPL 대신 실행에 직접 실행할 때, 실패한 명령은 완벽하게 잘 작동합니다. Spark 2.1 docs에서 : 스칼라 2.12.x 아직 지원되지 않습니다

scalaVersion := "2.11.11" 

참고 : 따라서

Spark runs on Java 7+, Python 2.6+/3.4+ and R 3.1+. For the Scala API, Spark 2.1.0 uses Scala 2.11. You will need to use a compatible Scala version (2.11.x).

, 당신은 스칼라의 최신 버전을 사용할 수 있습니다.