#java #apache-spark #static #mapreduce #rdd
Вопрос:
У меня есть класс Person, который имеет статическую переменную int totalCounter и идентификатор переменной экземпляра int. Всякий раз, когда создается экземпляр нового человека, у него должен быть новый уникальный идентификатор для каждой JVM.
public class Person {
public static int totalCounter = 1;
public int id = 1;
public Person() {
synchronized (Person.class) {
id = totalCounter;
totalCounter ;
}
}
}
Я ожидал, что все экземпляры person будут иметь последовательный и уникальный идентификатор, начиная с 1,2,3 до n
final JavaPairRDD<Integer, Tuple2<Integer, Person>> entityAddAttributes = baseEntity.mapPartitionsToPair(entities -> {
return Iterators.transform(entities, entity -> {
Person person = new Person();
return new Tuple2<>(entity._1, new Tuple2<>(entity._2, person));
});
});
final JavaPairRDD<UUID, String> formattedRecords = entityAddAttributes.mapPartitionsToPair(input -> Iterators.transform(input,
person -> new Tuple2<>(UUID.randomUUID(), String.valueOf(person._2._2.id)));
...
saveAsTextFile();
Я отправил задание spark только с 1 исполнителем и 200 разделами, и идентификатор фактически начинается с 3151 вместо 1. Если я изменю разделы на 1, идентификатор будет начинаться с 1. может ли кто-нибудь помочь объяснить? тх!