Как сгенерировать последовательность чисел для каждой задачи в искре - PullRequest
0 голосов
/ 24 декабря 2018

Я использую код ниже для отображения некоторых данных в спарк.Мне нужно уникальное последовательное число, которое будет сгенерировано для каждой задачи при сопоставлении его с парой rdd.Я пытался использовать аккумуляторы.Но из исключений я узнал, что получение значения из накопителя невозможно внутри задачи.Пожалуйста, помогите мне в этом, так как я очень новичок в этой области и не имею представления о решении.

Accumulator<Integer> uniqueIdAccumulator = context.getJavaSparkContext().accumulator(0, "uniqueId");
JavaPairRDD<String, String> rdd1 = javaPairRdd.mapToPair(f-> {
    uniqueIdAccumulator.add(1);
    return new Tuple2<String,String>(f._1, this.getMessageString(f._2, null,uniqueIdAccumulator.value()));
});

1 Ответ

0 голосов
/ 27 декабря 2018

JavaPairRDD rdd1 = javaPairRdd.zipWithIndex().mapToPair(f-> { return new Tuple2(f._1._1,this.getMessageString(f._1._2, null, f._2)); });

Нет необходимости в аккумуляторе.ZipWithIndex помог получить решение.ZipWIthIndex возвращает RDD с существующим кортежем и длинным индексным номером.Я использовал индексный номер для генерации уникального порядкового номера.

...