2017-09-13 1 views
1

MM + 레코드가있는 거대한 데이터 세트가 있으며 각 레코드에 고유 ID를 할당하려고합니다. 아래 코드를 시도했지만 행 ID가 순차적이므로 많은 시간이 필요합니다. 작업을 최적화하기 위해 메모리 매개 변수를 조정 해 보았습니다. 많은 성능을 얻을 수 없었습니다.각 레코드 스파크의 고유 ID 생성 방법

샘플 조각 :

JavaRDD<String> rawRdd=...... 
rawRdd.zipWithIndex() 
.mapToPair(t->new Tuple2<Long,String>(t._2,t._1)) 

고유 ID를 할당 할 수있는 더 좋은 방법이 있습니까? 감사

답변

1

접근 1 : 요구 사항 그냥 고유 ID를 할당하는 경우, 당신은 고유 한 행 ID로 UUID를 사용할 수 있습니다 :

rawRdd.mapToPair(t->new Tuple2<String,String>(t,UUID.randomUUID().toString())); 

만 단점 아이디의 길이는 36 바이트이다.

접근법 2 : 고유 ID를 할당하는 중앙 집중식 시스템을 만듭니다. 나는 ID를 생성하는 패턴을 따르는 REST 기반 API를 사용하고 각 맵 작업은 고유 ID를 얻기 위해 REST 서비스를 호출한다.

두 번째 방법은 id에 대한 패턴을 디자인 할 수있는 완전한 제어 기능을 제공합니다.

+0

감사의 말 : 접근 방식 2에 대해 더 자세히 알려주십시오. –

+1

[나머지 예제] (https://www.mkyong.com/spring-mvc/spring-3-rest-hello-world-example/)에 따라 REST를 사용하여 중앙 집중식 ID를 만들고 spark에서 호출하여 id를 각각에 할당합니다. 기록. –