如何在Spark数据帧中为每个组添加序列号

如何在Spark数据帧中为每个组添加序列号,r,apache-spark,dplyr,apache-spark-sql,sparklyr,R,Apache Spark,Dplyr,Apache Spark Sql,Sparklyr,我试图在Spark数据框中添加一列,并根据一个条件使用序列号:我想为其中一列中的每个组分配顺序整数 我尝试了很多方法,但似乎都不管用 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 Dat

我试图在Spark数据框中添加一列,并根据一个条件使用序列号:我想为其中一列中的每个组分配顺序整数

我尝试了很多方法,但似乎都不管用

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"

df您可以使用
row\u number
窗口函数,但要应用它,您需要某种形式的排序。例如,如果数据定义如下

set.seed(1)
df <- copy_to(sc, tibble(group=rep(c("a", "b"), 3), value=runif(6)))
#来源:惰性查询[??x 3]
#数据库:spark_连接
#组:组
#排序人:value,TRUE
群值r
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
如果没有预定义的顺序,您可以尝试使用
montonicaly\u increasing\u id
添加一个(请确保您首先理解Spark的顺序语义),或者,如果您不关心顺序,请使用用于分组的同一列:

df %>% 
  group_by(group) %>% 
  arrange(group, .by_group=TRUE) %>%
  mutate(r = row_number())
#来源:惰性查询[??x 3]
#数据库:spark_连接
#组:组
#排序人:组,正确
群值r
1A 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

如果以这种方式应用,组中值的顺序将是不确定的

我收到一个错误“error:org.apache.spark.sql.AnalysisException:无法解析给定输入列的“
值”
”:“@YogeshKumar显然列名应该反映您的实际数据。答案包含最小的可复制数据集,要在您自己的输入上运行它,您必须相应地调整它。
df %>% 
  group_by(group) %>% 
  arrange(group, .by_group=TRUE) %>%
  mutate(r = row_number())