/ / Jak wygenerować unikalny identyfikator dla każdej iskry rekordu - java, apache-spark

Jak wygenerować unikalny identyfikator dla każdej iskry rekordu - java, apache-spark

Mam ogromne zbiory danych z rekordami MM + i jestempróbuje przypisać unikalny identyfikator do każdego rekordu. Próbowałem poniżej kodu, ale zajmuje to dużo czasu, ponieważ identyfikator wiersza jest sekwencyjny. Próbowałem dostosować parametry pamięci, aby zoptymalizować zadanie, ale nie mogłem uzyskać dużej wydajności.

przykładowy fragment:

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

Czy istnieje lepszy sposób przypisania unikalnego identyfikatora? dzięki

Odpowiedzi:

1 dla odpowiedzi № 1

Podejście 1: jeśli wymagasz tylko przypisania unikalnego identyfikatora, możesz użyć UUID jako unikalnego identyfikatora wiersza:

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

Jedyną wadą jest to, że długość identyfikatora wynosi 36 bajtów.

Podejście 2: Utwórz scentralizowany system, aby przypisać unikalny identyfikator. Korzystam z interfejsu API opartego na REST, który kieruje się wzorcem w celu wygenerowania identyfikatora, a każda operacja mapowania wywołuje usługę REST w celu uzyskania unikalnego identyfikatora.

Drugie podejście daje pełną kontrolę nad zaprojektowaniem wzoru dla id.