2017-06-06 85 views
2

在Spark-Sql 1.6版中,使用DataFrame s,是否有一种方法可以针对特定列计算每行的当前行和下一行的总和?如何计算下一个当前行?

例如,如果我有一列一个表,像这样

Age 
12 
23 
31 
67 

我想下面的输出

Sum 
35 
54 
98 

最后一行被丢弃,因为它没有“下一个行“添加到。

现在我正在通过对表格进行排名并将其与自身结合起来,其中rank等于rank+1

有没有更好的方法来做到这一点? 这可以用Window函数完成吗?

回答

1

是的,你肯定可以用Window函数做rowsBetween函数。我在以下示例中使用了person列,用于grouping目的。

import sqlContext.implicits._ 
import org.apache.spark.sql.functions._ 

val dataframe = Seq(
    ("A",12), 
    ("A",23), 
    ("A",31), 
    ("A",67) 
).toDF("person", "Age") 

val windowSpec = Window.partitionBy("person").orderBy("Age").rowsBetween(0, 1) 
val newDF = dataframe.withColumn("sum", sum(dataframe("Age")) over(windowSpec)) 
    newDF.filter(!(newDF("Age") === newDF("sum"))).show 
+0

使用'Window.currentRow'代替 –

+0

谢谢。你能否也请看看[这个问题](https://stackoverflow.com/q/44392754/416300)? – summerbulb

相关问题