前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hive问题之UDF语义错误10014 原

Hive问题之UDF语义错误10014 原

作者头像
云飞扬
发布2019-03-13 10:17:40
3.8K0
发布2019-03-13 10:17:40
举报
文章被收录于专栏:星汉技术

问题描述

使用Hive处理数据的时候,写了一个UDF,然后上传到服务器,添加到Hive中之后,一直报如下的错误:

代码语言:javascript
复制
FAILED: SemanticException [Error 10014]: Line 1:7 Wrong arguments '"[12.34, 18.34]"': No matching method for class cn.com.xh.udf.Distance with (string, string). Possible choices: 

解决思路

语义错误,错误码10014,我只在网上看到一个这个问题的提问,没有人回答,而且他的错误一眼就看出来了, UDF没有使用规定的方法名称,看到这里,我立刻检查我的方法名称,代码片段如下:

代码语言:javascript
复制
import org.apache.hadoop.hive.ql.exec.UDF;

public class Distance extends UDF {

	/**
	 * 两个经纬度点之间的距离计算。
	 * @param coord1 一个点的经纬度形如:[a,b]
	 * @param coord2 另一个点的经纬度,形如:[a,b]
	 * @return value 距离,如果返回-1表示参数无法计算或者缺失
	 */
	public double envalate(String coord1, String coord2) {
		// coord1:Document{{type=Point, coordinates=[116.423291, 39.98778]}}
		// coord2:[116.44308142812918, 39.98923993314435]
		if (coord1 == null && coord2 == null) {
			return -1;// -1表示无法计算,缺失值等不正常情况。
		}
		int c1 = coord1.indexOf("[") + 1;
		// System.out.println(c1);
		int c2 = coord1.indexOf("]");
       //省略后续代码
    }
}

一开始本人看了方法名称,感觉没错,可是后来,认真的对比了之后,发现方法名称写错了,正确的方法名称:evaluate()

这个坑可以吧!踩得够深!

解决方法

将方法名称修改完成,然后删除Hive中已经注册的方法,退出Hive Shell界面,重新进入Hive Shell,再进行UDF注册的步骤。即可解决!有时候不退出的话,会一直报错,不会进行jar包更新。

UDF注册参见:HIVE的UDF以及JDBC编程

总结

自古写代码字母写错了是最难检查的问题,所以写的时候一定要认真!这是一个很怎么说呢?很“高级”的错误!

代码语言:txt
复制
 (adsbygoogle = window.adsbygoogle || []).push({});
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/08/30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题描述
  • 解决思路
  • 解决方法
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档