2016-06-29 5 views
1

にハイブ登録UDFを使用しは、私は、以下のものを使用してビーラインを通じてハイブでUDFを登録スパーク

期待を返す
SELECT udfTest(name) from myTable; 

結果。

は、私はその後、スパーク・シェルを起動して、失敗し、次の

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

を実行します。スタックは数百行の長さである(私はここに貼り付けることができない)が、重要な部分は、以下のとおりです。

  • org.apache.spark.repl.SparkIMain $ TranslatingClassLoaderはjava.net.URLClassLoader
  • にキャストすることはできませんdefault.udftestのためのリソースを読み込むことができません
  • :java.lang.IllegalArgumentExceptionが:登録できません[/tmp/blarg/pathToMyJar.jar]

何かが際立っている場合、私はより詳細な情報を提供することができます。

SparkでHiveを通じて登録されたUDFを使用することはできますか?

スパークバージョン1.3.0

答えて

0

カスタムUDFを使用する場合は、あなたのUDFのためのjarファイルがアプリケーションに同梱されていることを確認し、ORは、UDFを指定する--jarsコマンドラインオプションを使用します詳細について

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

以下のようにスパークシェルを起動しながらパラメータとして-fileはCalling Hive User-Defined Functions from Sparkを指します。

+0

これは、spark-shellを実行しているときに、実際のUDFクラスに対するjar内のクラスパスを知る必要があります。これは、アプリケーションの実行時にわからないことです。これ以外の方法はありますか? –

+0

UDF JarをHDFS内のディレクトリ/パスにコピーして、それを知るようにspark-shellのパスを指定することができます。 – janeshs

0

最近同じ問題が発生しました。私たちが気づいたのは、jarパスがローカルで利用可能な場合、すべてがうまくいきます。 jarパスがhdfs上にある場合、それは動作しません。そこで、私たちがやったことは、FileSystem.copytoLocalFileを使ってjarファイルをローカルにコピーし、コピーしたファイルを追加することでした。クラスターとクライアントモードで私たちのために働いた

PS。これはSpark 2.0です。

関連する問題