2016-06-29 4 views
1

에서 하이브 등록 된 UDF를 사용하여 다음과 같은 : 예상 반환사용하여 직선을 통해 내가 하이브에서 UDF를 등록 불꽃

SELECT udfTest(name) from myTable; 

을 다음과 같이

CREATE FUNCTION udfTest AS 'my.udf.SimpleUDF' USING JAR 'hdfs://hostname/pathToMyJar.jar' 

그 때 나는 직선에서 사용할 수 있습니다 결과.

나는 다음 스파크 쉘을 실행하고 실패 다음

sqlContext.sql("SELECT udfTest(name) from myTable") 

를 실행합니다. 스택은 수백 라인 길이 (내가 여기에 붙여 넣기 할 수없는)하지만 핵심 부품은 다음과 같습니다

  • org.apache.spark.repl.SparkIMain $ TranslatingClassLoader는 이는 java.net.URLClassLoader
  • 캐스트 할 수없는 아무것도 눈에 띄는 경우 [/tmp/blarg/pathToMyJar.jar]

내가 자세한 내용을 제공 할 수 있습니다 등록 할 수 없습니다 : java.lang.IllegalArgumentException가 : default.udftest에 대한 자원을로드 할 수

  • 수 없습니다.

    Spark에서 하이브를 통해 등록 된 UDF를 사용할 수 있습니까?

    스파크 버전 1.3.0

  • 답변

    0

    , 당신의 UDF에 대한 jar 파일은 응용 프로그램, 또는는 UDF를 지정 --jars 명령 줄 옵션을 사용에 포함되어 있는지 확인합니다 사용자 정의 UDF를 사용하여 더 상세 Calling Hive User-Defined Functions from Spark 참조 들어

    ./bin/spark-shell --jars <path-to-your-hive-udf>.jar 
    

    아래와 같이 스파크 쉘을 실행하면서 파라미터로 - 파일.

    +0

    스파크 - 쉘을 실행할 때 실제 UDF 클래스에 대한 jar 클래스 경로를 알아야합니다. 이것은 응용 프로그램 런타임에 알 수없는 것입니다. 이 외에도 다른 방법이 있습니까? –

    +0

    UDF Jar를 HDFS의 일부 디렉토리/경로에 복사 한 다음 spark-shell의 경로를 알 수 있습니다. – janeshs

    0

    최근에 같은 문제가있었습니다. 우리가 알아 차 렸던 것은 항아리 경로가 국지적으로 이용 가능하다면 모든 것은 잘 통과한다는 것입니다. 항아리 경로가 hdfs에 있으면 작동하지 않습니다. 그래서 우리가 한 일은 FileSystem.copytoLocalFile을 사용하여 jar를 로컬에 복사 한 다음 복사 된 파일을 추가하는 것입니다. 클러스터 및 클라이언트 모드에서 우리를 위해 일했습니다

    추신 : 이것은 Spark 2.0입니다.