2016-07-27 8 views
0

私はハイブ0.13.1を使用しており、デフォルトのハイブハッシュ関数を使ってキーをハッシュしています。0、ヌル、1になるハイブハッシュ関数、なぜですか?

と同様のもの select hash(date、token1、token2、parameters ["a"]、parameters ["b"]、parameters ["c"])from table1;

私は150M行で実行しました。行の60%は正しくハッシュされています。残りの行については、0を返し、ハッシュ値として1を返します。私は悪いハッシュをもたらした行を見て、私は行に間違って何も表示されません。それを引き起こす原因は何ですか?

+0

多分あなたはそれをしたくないハッシュの例を提供することができます。その質問に答えるのは難しいだろう。 – gobrewers14

答えて

0

ハッシュ関数は、指定されたすべての引数が空白またはnullの場合にのみ0を返します。

Javaに精通している場合は、hash functionの実装をチェックすることができます。

ハッシュ関数は内部的に供給フィールドのハッシュコードを取得するためにObjectInspectorUtils.hashCodeを使用して、手動でこの問題をテストするためのJavaコードスニペットの下に使用します。プログラム上で実行するために必要な

import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils; 
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory; 
import org.apache.hadoop.io.Text; 
public class TestHash 
{ 
    public static void main(String[] args) 
    { 
     System.out.println(ObjectInspectorUtils.hashCode(null,PrimitiveObjectInspectorFactory.javaStringObjectInspector)); 
     System.out.println(ObjectInspectorUtils.hashCode(new Text(""),PrimitiveObjectInspectorFactory.javaStringObjectInspector)); 
    } 
} 

Mavenの依存関係:

<dependency> 
      <groupId>org.apache.hive</groupId> 
      <artifactId>hive-exec</artifactId> 
      <version>2.1.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.hadoop</groupId> 
      <artifactId>hadoop-common</artifactId> 
      <version>2.7.2</version> 
     </dependency> 
関連する問題