繁体   English   中英

如何在Spark-scala中实现LEAD和LAG

[英]How to implement LEAD and LAG in Spark-scala

我在spark数据帧中有最终记录(在连接和过滤之后)。我需要比较连续行(按键分区)列值并根据条件需要更改e_date列值,例如:

    sample table
    key1 key 2   col1   col2   s_date      e_date
     a     1      cv1     cv2   2014         2099 
     a     1      cv3     cv2   2016         2099 
     b     2      cv5     cv6   2016         2099
     b     2      cv5     cv6   2016         2099

   final table should look like 
    key1 key 2   col1   col2   s_date      e_date
     a     1      cv1     cv2   2014         2015  (next records s_date-1) 
     a     1      cv3     cv2   2016         2099 
     b     2      cv5     cv6   2016         2099
  1. 上面的表有复合键,所以key1和key2是键

  2. 通过键比较col1和col2值

  3. 如果任何列具有新值结束旧记录,其中新记录的s_date为-1(最终表中的第1,2行)

  4. 如果没有变化则忽略新记录(最终表格中的第3行)

scala-spark中的任何指针

领先和滞后已经实施:

import org.apache.spark.sql.functions.{lead, lag}
import org.apache.spark.sql.expressions.Window

lag('s_date, 1).over(Window.partitionBy('key1, 'key2).orderBy('s_date))

有关详细信息,请查看Spark SQL中的窗口函数简介

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM