我正在尝试使用基于条件的序列号向我的Spark DataFrame添加一列:我想为其中一列中的每个组分配顺序整数。
我尝试了很多方法,但似乎没有任何工作。
df<-data.frame(location=c("a","a","d","d","d"),
device_id=c(123,3455,234,4565,675),
expected_column=c(1,2,1,2,3))
#final_data_visitor is my spark Data Frame
random_data<-final_data_visitor
random_data<-random_data %>%
group_by(location_id,device_subscriber_id)%>%
mutate(visit_seq=1:n())
random_data
# error is "Error in from:to : NA/NaN argument
In addition: Warning message:
In 1:n() : NAs introduced by coercion"
这是我尝试执行代码时遇到的错误:
“from:to:NA / NaN参数出错 另外:警告信息: 在1:n():由强制引入的NA
答案 0 :(得分:1)
您可以使用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
如果以这种方式应用,组中值的顺序将是不确定的。