org.apache.spark.sql.AnalysisException:未定义函数:'ano'

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

我在 spark 3.0.0 中遇到这个错误:

错误 1:

org.apache.spark.sql.AnalysisException: Undefined function: 'ano'. This function is neither a registered temporary function nor a permanent function registered in the database 'sspkeyspace'.; line 1 pos 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 ;

而且效果很好。但是在 spark 中,进入应用程序,显示 ERRO1.

cql提示中的结果查询:

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

谢谢,

检查您的函数在哪里注册,如果是,请使用此命令:

SHOW USER FUNCTIONS;

如果已注册,则使用 root。访问函数:

默认为:

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

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

不幸的是,要将 UDF 公开给 Spark SQL,您需要为 Spark Cassandra Connector 本身编写一些代码。相反,最好在 Spark 本身中重新实现所需的功能,只需将 ano 调用的使用替换为对内置 Spark substring 的调用——它的性能可能会更高。