我已经创建了一个像下面这样的hive udf,
Class customUdf extends UDF{
def evaluate(col : String): String = {
return col + "abc"
}
}
然后,我在sparksession中注册了udf,
sparksession.sql("""CREATE TEMPORARY FUNCTION testUDF AS 'testpkg.customUdf'""");
当我尝试在scala代码中使用下面的查询来查询hive表时,它没有进展,也没有抛出错误,
SELECT testUDF(value) FROM t;
然而,当我从scala代码中传递如下字符串时,它就可以工作了
SELECT testUDF('str1') FROM t;
我正在通过sparksession运行查询。尝试使用GenericUdf,但仍然遇到相同的问题。只有当我传递hive列时才会发生这种情况。可能是什么原因呢?
2条答案
按热度按时间tsm1rwdh1#
尝试从hdfs引用您的jar:
k5ifujac2#
我不确定在Scala中是否实现了UDF,但当我在Java中遇到类似问题时,我注意到了一个区别,即如果插入literal,
则UDF会将其作为字符串接收。但当您从配置单元表中选择
您可能会得到一个称为LazyString的值,您需要使用getObject来检索它的实际值。