【发布时间】:2019-11-23 07:13:39
【问题描述】:
我必须在 spark 中读取现有的 hive udf,所以在 spark.sql 中我正在创建临时函数并使用它,它在 spark shell 中工作正常,但在 spark-submit 中失败并出现错误:
org.apache.hadoop.hive.metadata.HiveException : 无法执行 方法公共静态布尔值 com.xxx.x.x.udfs.isb_udf.evaluate(Java.lang.string) 对象 xxxx.udf 类 xxxx 的 args {Java.lang.string} 大小为 1 ...
我也看到了... 由 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 shell 中有效,但在 spark 提交中无效。
信息:如果我在没有 udf 的情况下读取 hive 表,则它在 spark 提交中工作。使用 hive udf 时可能会出现该问题。
【问题讨论】:
-
虽然你想做什么是相当清楚的,但如果你包含一个最小的可重现示例(有效的命令、失败的命令、失败的确切错误消息),其他人会更容易帮助你。理想情况下,还有足够的上下文来运行命令。
-
spark.sql("CREATE TEMPORARY FUNCTION currency AS 'com.spark.udf.FormatCurrency'"); val x = spark.sql("从 hive_table 中选择货币(col1)") ;x.show.上述命令在 spark shell 中有效,但在 spark 提交中无效
-
请添加到问题。
标签: apache-spark hadoop hive apache-spark-sql hiveql