如何解决org.apache.spark.sql.AnalysisException:未定义的函数:'ano'
我在 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中,进入应用程序,显示ERRO1。
cql 提示中的结果查询:
ano
-----
2014
2009
2013
2012
2014
2012
2011
2019
谢谢,
解决方法
它不会以这种方式工作 - 当您在 Spark 中执行 select ano(data_compra) as ano from Compras
时,它会将 ano
函数视为 Spark 函数,而不是 Cassandra UDF 函数。
不幸的是,要将 UDF 公开给 Spark SQL,您需要为 Spark Cassandra 连接器本身编写一些代码。相反,最好在 Spark 本身中重新实现所需的功能,只需将 ano
调用的使用替换为对内置 Spark substring 的调用 - 它可能会更高效。
检查你的函数在哪里注册,如果它是,使用这个命令:
keytool -list -v -keystore ./android/app/debug.keystore -alias androiddebugkey -storepass android -keypass android
如果它被注册使用根然后。访问该功能:
默认为:
SHOW USER FUNCTIONS;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。