我是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|
+---+------+-----+----+-----------+