Видимо, вы не делаете ничего плохого.
Но, похоже, такого решения не существует.
Причина, по которой вы получаете повторяющиеся числа, в основном потому, что ваша оценка происходит в 2-х мапперах (если вы используете искровую машину, то 2-х исполнителей). И у каждого исполнителя UDF начнет последовательность с 1.
Таким образом, одно и то же значение для первых двух записей случайно. Результаты могут отличаться в зависимости от того, сколько картографов используется для выполнения запроса.
Вы можете достичь того, что хотите, ограничив количество исполнителей до 1. С точки зрения искры, я думаю, вы можете использовать операцию repartition(1)
.
Также посмотрите @ this thread , в котором есть несколько полезных моментов.