我必须阅读spark中现有的配置单元udf,因此在spark.sql中,我正在创建临时函数并使用它,它在spark shell中运行良好,但在spark-submit中,它失败并显示错误:
org.apache.hadoop.hive.metadata.HiveException:无法执行 方法public static boolean 对对象xxxx.udf com.xxx.x.x.udfs.isb_udf.evaluate(Java.lang.string) xxxx类,其参数为1的args {Java.lang.string} ...
我也看到了... 由Java.lang.reflect.InvocationTargetException
引起代码示例:
spark.sql("CREATE TEMPORARY FUNCTION currency AS 'com.spark.udf.FormatCurrency'");
val x = spark.sql("select currency(col1) from hive_table") ;
x.show()
以上命令在spark外壳中有效,但在spark提交中不起作用。
信息:如果我在没有udf的情况下读取hive表,则它在spark提交中起作用。使用蜂巢udf时可能会发生此问题。
答案 0 :(得分:1)
原因之一是,如果您使用多个jar传递火花提交,并且它包含您的UDF使用的同一类,则可能会出现此问题。之前我有一个类似的案例,我删除了罐子,并在一个罐子中添加了一个罐子以及spark提交。这个对我有用。我不知道你的情况。尝试移除多个罐子,确保可以正常使用。