Hive問題之UDF語義錯誤10014

Hive問題之UDF語義錯誤10014

問題描述

使用Hive處理數據的時候,寫了一個UDF,而後上傳到服務器,添加到Hive中以後,一直報以下的錯誤:java

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沒有使用規定的方法名稱,看到這裏,我馬上檢查個人方法名稱,代碼片斷以下:apache

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()編程

這個坑能夠吧!踩得夠深!bash

解決方法

將方法名稱修改完成,而後刪除Hive中已經註冊的方法,退出Hive Shell界面,從新進入Hive Shell,再進行UDF註冊的步驟。便可解決!有時候不退出的話,會一直報錯,不會進行jar包更新。服務器

UDF註冊參見:HIVE的UDF以及JDBC編程oop

總結

自古寫代碼字母寫錯了是最難檢查的問題,因此寫的時候必定要認真!這是一個很怎麼說呢?很「高級」的錯誤!lua

相關文章
相關標籤/搜索