2017-11-27 17 views
0

私はHiveを初めて使用しており、HiveコマンドラインでUDFを作成して使用しようとしています。FAILED:SemanticException [エラー10014]:行1:21間違った引数 'stock_price_high':

サンプルNYSEデータセットに基づいて株の共分散を計算するJavaコードを作成しました。以下は、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」と呼ばtempoarary機能を作成し、パラメータを渡します。

​​

私はエラーの下に取得しています:

FAILED: SemanticException [Error 10014]: Line 1:21 Wrong arguments 'stock_price_high': No matching method for class udf.CoVariance with (double, double, double, double, bigint). Possible choices:

は間違ってここで何が起こっていますか?あなたの助けは本当に感謝されます。

答えて

0

あなたはUDF登録しますが、javadocが言うかはっきりしないこの

あなたの方法 covarianceevaluate

に名前を変更しなければならないとint tuplecountは、Hiveの誤差に応じて、longまたはBigIntegerでなければなりません

Requirements for all classes extending this UDF are:
- Implement one or more methods named evaluate which will be called by Hive

+0

また、Javaのブログがたくさんありますhttps://hive.apache.org/javadocs/r1.2.2/api/org/apache/hadoop/hive/ql/exec/UDF.html –

+0

UDF。私が見てきたのは、その方法を言及しただけです –

+0

私はそのリンクを辿り、UDFでブログを探すようにします。 –

0

これを指摘してくれてありがとう、自分の関数を定義できると思ったが、あらかじめ定義されたf統一。あなたが参照しているJavaDocヘルプページを参照することができれば、それは本当に役立つでしょう。

あなたの提案に基づいて、以下のコードを変更しました。このUDFをハイブシェルから作成しました。しかし、それが戻ってくる結果は、計算のために無限大です。

'tuplecount'のデータ型をlongとdoubleに変更しようとしましたが、それでも同じ問題が発生しています。

QXM QTM 2 Infinity

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 
+0

何か提案がありますか? –

関連する問題