简体   繁体   English

列值未正确传递给 hive udf spark scala

[英]Column value not properly passed to hive udf spark scala

I have created a hive udf like below,我创建了一个如下所示的 hive udf,

Class customUdf extends UDF{
def evaluate(col : String): String = {
return col + "abc"
}
}

I then registered the udf in sparksession by,然后我在 sparksession 中注册了 udf,

sparksession.sql("""CREATE TEMPORARY FUNCTION testUDF AS 'testpkg.customUdf'""");

When I try to query hive table using below query in scala code it does not progress and does not throw error also,当我尝试在 scala 代码中使用以下查询查询配置单元表时,它不会进行,也不会抛出错误,

SELECT testUDF(value) FROM t;

However when I pass a string like below from scala code it works但是,当我从 scala 代码传递如下字符串时,它可以工作

SELECT testUDF('str1') FROM t;

I am running the queries via sparksession.Tried with GenericUdf, but still facing same issue.我正在通过 sparksession 运行查询。使用 GenericUdf 进行了尝试,但仍然面临同样的问题。 This happens only when i pass hive column.仅当我通过 hive 列时才会发生这种情况。 What could be reason.可能是什么原因。

尝试从 hdfs 引用您的 jar:

create function testUDF as 'testpkg.customUdf' using jar 'hdfs:///jars/customUdf.jar';

I am not sure about implementation of UDFs in Scala, but when I faced similar issue in Java, I noticed a difference that if you plug in literal我不确定 Scala 中 UDF 的实现,但是当我在 Java 中遇到类似问题时,我注意到如果你插入文字会有所不同

select udf("some literal value")

then it is received by UDF as a String.然后它被 UDF 作为字符串接收。 But when you select from a Hive table但是当你从 Hive 表中选择时

select udf(some_column) from some_table

you may get what's called a LazyString for which you would need to use getObject to retrieve actual value.您可能会得到所谓的LazyString ,您需要使用 getObject 来检索实际值。 I am not sure is Scala handles these lazy values automatically.我不确定 Scala 是否会自动处理这些惰性值。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM