복붙노트

[HADOOP] 하이브 해시 널 0의 결과로 기능, 1, 그 이유는 무엇입니까?

HADOOP

하이브 해시 널 0의 결과로 기능, 1, 그 이유는 무엇입니까?

나는 하이브 0.13.1을 사용하고 기본 하이브 해시 함수를 사용하여 키 조합을 해시하고있다.

같은 뭔가       표 1에서의 해시 (날짜, token1, token2, 파라미터들 "A", 파라미터들 "B", 파라미터 [ "C"를])를 선택;

나는 150M 행에 달렸다. 행의 60 %를 들면, 제대로 해시. 나머지 행의 경우, 해시 null를 0 또는 1을 주었다. 나는 나쁜 해시에, 나는 행 잘못 아무것도 표시되지 않는 결과 행을 바라 보았다. 그 원인이 무엇을 할 수 있을까?

해결법

  1. ==============================

    1.해시 함수는 모든 지정된 인수는 공백 또는 널 (null) 경우에만 0을 반환합니다.

    해시 함수는 모든 지정된 인수는 공백 또는 널 (null) 경우에만 0을 반환합니다.

    자바에 익숙하다면 당신은 해시 함수의 구현을 확인할 수 있습니다.

    해시 함수는 내부적으로 제공된 필드에 대한 해시 코드를 얻을 수동으로이 문제를 테스트하기 위해 자바 코드 아래 사용 ObjectInspectorUtils.hashCode을 사용합니다 :

    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) );
        }
    }
    

    위의 프로그램 실행에 필요한 메이븐 의존성 :

    <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>
    
  2. from https://stackoverflow.com/questions/38617437/hive-hash-function-resulting-in-0-null-and-1-why by cc-by-sa and MIT license