如何用下一行计算当前行?

时间:2017-06-06 12:27:46

标签: scala apache-spark apache-spark-sql window-functions

在Spark-Sql 1.6版中,使用DataFrame s,是否有办法为特定列计算每行的当前行和下一行的总和?

例如,如果我有一个包含一列的表,就像这样

Age
12
23
31
67

我想要以下输出

Sum
35
54
98

最后一行被删除,因为它没有要添加的“下一行”。

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

有更好的方法吗? 可以使用Window函数来完成吗?

1 个答案:

答案 0 :(得分:1)

是的,您可以使用Window函数来处理rowsBetween函数。我在以下示例中使用了persongrouping目的。

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