为表中的帐户添加上一日期的新列

gstyhher  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(334)

假设您有一个表,其中包含过去4年的帐户快照,每个日期/帐户对1行(注意账户不需要每天都有一行)。
为简单起见,假设有3列: acct_number , date 以及 balance . 如何在表中记录的前一个日期的帐户的日期/余额行中再添加两列?
好像是按 acct_number 然后日期“抵消1”并加入原始表是一种很有前途的方法,但我不知道您将如何实现这一点。

o7jaxewo

o7jaxewo1#

解决方案是使用延迟为1的windows功能。

import org.apache.spark.sql.expressions.Window

val df = load_my_df()

val frame = Window.partitionBy("acct_number").orderBy("date")
val df_new = df.withColumn("prev_balance", lag("balance", 1, null).over(frame))

这里有很好的例子:https://sparkbyexamples.com/spark/spark-sql-window-functions/
文档:https://databricks.com/blog/2015/07/15/introducing-window-functions-in-spark-sql.html

相关问题