sparksql和使用现有的hiveudf

pzfprimi  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(355)

我必须在spark中读取现有的配置单元自定义项,因此在spark.sql中我创建了临时函数并使用它,它在spark shell中运行良好,但在spark submit中失败,错误如下:
org.apache.hadoop.hive.metadata.hiveexception:无法对具有大小为1的args{java.lang.string}的类x的对象x.udf执行方法public static boolean com..x.udfs.isb\u udf.evaluate(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()

上面的命令在sparkshell中工作,但在sparksubmit中不工作。
信息:如果我读取没有自定义项的配置单元表,它在spark submit中工作。使用配置单元自定义项时可能会出现问题。

06odsfpq

06odsfpq1#

原因之一是,如果您使用多个jar传递到spark submit,并且它包含您的udf正在使用的同一个类,那么问题可能会发生。我以前也遇到过类似的情况,我删除了jar,并在jar中添加了一个jar和spark submit。这对我很有用。我不知道你的案子。尝试删除多个jar,并确保它会工作。

相关问题