最多50个以上的运行顺序

时间:2019-06-16 14:28:33

标签: apache-spark dataframe apache-spark-sql

我是Spark Data-frame的新手,请帮助我找到解决方案。 蝙蝠侠在每场比赛中都取得了一些得分,需要找出每位球员得分超过50分的最大比赛顺序。

输入:

library(ggplot2)

colr <- paste(x$category, x$type)

ggplot(x, aes(x = date, y = score, 
              group = colr, 
              linetype = colr, 
              colour = colr)) + 
  geom_line(size = 1.25) +
  scale_color_manual(
    values = c("#4286f4", "#f9026d", "#4286f4", "#f9026d"),
    labels = sort(unique(colr)),
    name = "category and type"
  ) +
  scale_linetype_manual(values = c(1, 1, 3, 3),
                        labels = sort(unique(colr)),
                        name = "category and type")

输出:

Id,Player,Score  
1,A,88  
1,B,64   
2,A,122  
2,B,44  
3,A,52  
3,B,208  
4,A,42  
4,B,124  

我尝试如下:

Player,Maximum_Sequence  
A,3  
B,2  

输出:

val s = spark.read.option("inferSchema", true).option("header","true").csv("scores.csv")  

 s.withColumn("Flag",when($"Score" > 49,1).otherwise(0))
.withColumn("Running_Sum",sum($"Flag").over(Window.partitionBy("Player").orderBy($"Id"))).show

当我们在Flag中得到0时,是否有任何方法可以重置Running_Sum。如果可以的话,我们只需要为每个玩家找到最大running_sum。

我能够使用以下awk命令在Unix中解决:

+---+------+-----+----+-----------+ | Id|Player|Score|Flag|Running_Sum| +---+------+-----+----+-----------+ | 1| B| 64.0| 1| 1| | 2| B| 44.0| 0| 1| | 3| B|208.0| 1| 2| | 4| B|124.0| 1| 3| | 1| A| 88.0| 1| 1| | 2| A|122.0| 1| 2| | 3| A| 52.0| 1| 3| | 4| A| 42.0| 0| 3| +---+------+-----+----+-----------+

0 个答案:

没有答案