[HADOOP] 하이브 해시 널 0의 결과로 기능, 1, 그 이유는 무엇입니까?
HADOOP하이브 해시 널 0의 결과로 기능, 1, 그 이유는 무엇입니까?
나는 하이브 0.13.1을 사용하고 기본 하이브 해시 함수를 사용하여 키 조합을 해시하고있다.
같은 뭔가 표 1에서의 해시 (날짜, token1, token2, 파라미터들 "A", 파라미터들 "B", 파라미터 [ "C"를])를 선택;
나는 150M 행에 달렸다. 행의 60 %를 들면, 제대로 해시. 나머지 행의 경우, 해시 null를 0 또는 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>
from https://stackoverflow.com/questions/38617437/hive-hash-function-resulting-in-0-null-and-1-why by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 실패 기어 (0) | 2019.10.21 |
---|---|
[HADOOP] '--map 열 - 하이브'무시 Sqoop을 기능 (0) | 2019.10.21 |
[HADOOP] 돼지에서 NOT IN 절 (0) | 2019.10.21 |
[HADOOP] 파이썬 모듈 impyla를 사용하여 Kerberos를의 하둡 클러스터에 연결 (0) | 2019.10.21 |
[HADOOP] 추가 하이브 JDBC 의존성은 글래스 피시 배포를 나누기 (0) | 2019.10.21 |