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

Posted

技术标签:

【中文标题】如何计算当前行与下一行?【英文标题】:How to calculate the current row with the next one? 【发布时间】:2017-06-06 12:27:46 【问题描述】:

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

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

Age
12
23
31
67

我想要以下输出

Sum
35
54
98

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

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

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

【问题讨论】:

【参考方案1】:

是的,您绝对可以使用rowsBetween 函数来处理Window 函数。在下面的示例中,我使用了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

【讨论】:

改用Window.currentRow 谢谢。你能不能也看看this question?

以上是关于如何计算当前行与下一行?的主要内容,如果未能解决你的问题,请参考以下文章

使用Python Dataframe将行与下一行进行比较并从结果中创建一个新列?

如何将当前行与另一行进行比较

常用快捷键:

如何计算两个矩阵的两两行距(欧氏距离)

SQL:StartTime 列的当前行与 EndTime 列的上一行之间的差异

如何使用dc_shell中的/ bin / sed命令删除与下一行中调用的下一个新模式匹配的模式