org.apache.spark.sql.AnalysisException: Undefined function: 'ano'



我在spark 3.0.0:中得到了这个错误

ERRO1:

org.apache.spark.sql.AnalysisException:未定义的函数:"ano"。此函数既不是已注册的临时函数,也不是在数据库"sspkeyspace"中注册的永久函数。;第1行位置58

我在Cassandra DB 3.11.9中创建了一个UDF,以提取日期列的年份:

CREATE OR REPLACE FUNCTION ano (input DATE)
RETURNS NULL ON NULL INPUT RETURNS TEXT
LANGUAGE java AS 'return input.toString().substring(0,4);';

我在cqlsh提示符下运行了查询:

select  ano(data_compra) as ano from Compras ;

而且效果很好。然而,在火花中,进入应用程序,显示ERRO1。

cql提示中的结果查询:

ano
-----
2014
2009
2013
2012
2014
2012
2011
2019

谢谢,

它不会以这种方式工作-当您在Spark中执行select ano(data_compra) as ano from Compras时,它将ano函数视为Spark函数,而不是Cassandra UDF函数。

不幸的是,要向Spark SQL公开UDF,您需要为Spark Cassandra连接器本身编写一些代码。相反,最好在Spark本身中重新实现所需的功能,只需将ano调用的使用替换为对内置Spark子字符串的调用——这可能会更具性能。

检查函数的注册位置,如果是,请使用以下命令:

SHOW USER FUNCTIONS;

如果已注册,则使用root。访问功能:

默认情况下为:

select  default.ano(data_compra) as ano from Compras ;

最新更新