【问题标题】:Spark SQL and using existing hive udfsSpark SQL 和使用现有的 hive udfs
【发布时间】: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


【解决方案1】:

其中一个原因是,如果您使用多个 jars 传递给 spark 提交,并且它包含您的 UDF 正在使用的相同类,则可能会出现问题。我之前有一个类似的案例,我删除了 jars 并在 -jars 中添加了一个 jars 以及 spark submit。这个对我有用。我不知道你的情况。尝试删除多个罐子,并确保它会工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 2020-07-10
    • 2019-09-21
    • 1970-01-01
    相关资源
    最近更新 更多