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 的调用——它的性能可能会更高。
我在 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 的调用——它的性能可能会更高。