[英]FAILED: SemanticException [Error 10014]: Line 1:21 Wrong arguments 'stock_price_high':
我是Hive的新手,正在嘗試在Hive命令行中創建和使用UDF。
我創建了一個Java代碼來根據樣本NYSE數據集計算股票的協方差。 以下是Java中的代碼:
package udf;
import org.apache.hadoop.hive.ql.exec.UDF;
public class CoVariance extends UDF {
public Double covariance (Double stockpricex, Double stockpricey, Double avgstockpricex, Double avgstockpricey, int tuplecount) {
if (stockpricex == null|| stockpricey == null || avgstockpricex == null || avgstockpricey == null || tuplecount == 0 ) {
return null;
} //check for invalid parameters
Double covar = ((stockpricex-avgstockpricex)*(stockpricey-avgstockpricey)/(tuplecount - 1));
return covar.doubleValue();
} // return the final co-variance of the stocks
} // end of class
將jar文件添加到配置單元外殼后,我創建了一個名為“ cv”的臨時函數並傳遞了參數。
select stock_symbol, cv(stock_price_high, stock_price_low, avg(stock_price_high), avg(stock_price_low), count(stock_price_high)) from nyse group by stock_symbol, stock_price_high, stock_price_low;
我得到以下錯誤:
失敗:SemanticException [錯誤10014]:行1:21錯誤的參數'stock_price_high':類udf.CoVariance的(雙,雙,雙,雙,雙,bigint)沒有匹配方法。 可能的選擇:
這是怎么了? 您的幫助將不勝感激。
不清楚如何注冊UDF,但JavaDoc表示
擴展此UDF的所有類的要求是:
-實現一個或多個名為evaluate
方法,該方法將由Hive調用
您的方法covariance
應重命名evaluate
根據Hive錯誤, int tuplecount
應該為long
或BigInteger
。
感謝您指出這一點,我認為我們可以定義自己的函數,但是似乎我們必須使用該預定義的函數。 如果您可以參考所參考的JavaDoc幫助頁面,那將真正有幫助。
根據您的建議,我對代碼進行了以下更改,現在可以從Hive Shell中校准此UDF。 但是返回的結果是Infinity進行計算。
我嘗試將'tuplecount'的數據類型更改為long和double,這仍然會導致相同的問題。
QXM QTM 2無限
package customudf;
import org.apache.hadoop.hive.ql.exec.UDF;
public class CoVariance extends UDF {
public Double evaluate (double stockpricex, double stockpricey, double avgstockpricex, double avgstockpricey, double tuplecount) {
Double result = null;
if (stockpricex == 0|| stockpricey == 0 || avgstockpricex == 0 || avgstockpricey == 0 || tuplecount == 0 ) {
return null;
} //check for invalid parameters
else {
tuplecount --;
result = ((stockpricex-avgstockpricex)*(stockpricey-avgstockpricey)/(tuplecount));
return result.doubleValue();
}
} // return the final co-variance of the stocks
} // end of class
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.