Вы можете использовать row_number
оконную функцию, но чтобы ее можно было применить, вам потребуется некоторая форма заказа.Например, если данные определены ниже
set.seed(1)
df <- copy_to(sc, tibble(group=rep(c("a", "b"), 3), value=runif(6)))
, вы можете
df %>%
group_by(group) %>%
arrange(value, .by_group=TRUE) %>%
mutate(r = row_number())
# Source: lazy query [?? x 3]
# Database: spark_connection
# Groups: group
# Ordered by: value, TRUE
group value r
<chr> <dbl> <int>
1 b 0.372 1
2 b 0.898 2
3 b 0.908 3
4 a 0.202 1
5 a 0.266 2
6 a 0.573 3
. В случае отсутствия предопределенного заказа, вы можете попробовать добавить его, используя montonically_increasing_id
(пожалуйста, сделайтеубедитесь, что вы сначала понимаете семантику упорядочения в Spark) или, если вас не интересует порядок того же столбца, который вы используете для группировки:
df %>%
group_by(group) %>%
arrange(group, .by_group=TRUE) %>%
mutate(r = row_number())
# Source: lazy query [?? x 3]
# Database: spark_connection
# Groups: group
# Ordered by: group, TRUE
group value r
<chr> <dbl> <int>
1 a 0.266 1
2 a 0.573 2
3 a 0.202 3
4 b 0.372 1
5 b 0.908 2
6 b 0.898 3
Если применять этот способ, порядок значений в группебудет недетерминированным.