org.apache.spark.sql.analysisexception:未定义函数:“ano”

xe55xuns  于 2021-07-09  发布在  Spark
关注(0)|答案(2)|浏览(429)

我在spark 3.0.0中发现了这个错误:
错误1:
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 ;

而且效果很好。然而在Spark中,进入应用程序后,显示出错误1。
cql提示符中的结果查询:

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

谢谢,

odopli94

odopli941#

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

SHOW USER FUNCTIONS;

如果已注册,则使用根。要访问该函数:
默认情况下为:

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

vfhzx4xs2#

它不会这样工作-当你执行 select ano(data_compra) as ano from Compras 在spark,它正在考虑 ano 函数为spark函数,而不是cassandra udf函数。
不幸的是,要将udf公开给spark sql,您需要为spark cassandra连接器本身编写一些代码。相反,最好在spark中重新实现所需的功能,只需替换 ano 调用内置的spark子串-它可能会更出色。

相关问题