代码之家  ›  专栏  ›  技术社区  ›  jingx

如何计算`值[i]-值[i-1]`火花法?[副本]

  •  0
  • jingx  · 技术社区  · 8 年前

    window 火花滑动功能 DataFrame 在斯卡拉。

    数据帧 带列 Col1 Col2 Col3 , date volume 和 new_col .

    Col1    Col2    Col3    date     volume new_col
                            201601  100.5   
                            201602  120.6   100.5
                            201603  450.2   120.6
                            201604  200.7   450.2
                            201605  121.4   200.7`
    

    新颜色

    val windSldBrdrxNrx_df = df.withColumn("Prev_brand_rx", lag("Prev_brand_rx",1))
    

    你有什么建议吗?

    0 回复  |  直到 6 年前
        1
  •  33
  •   mrsrinivas    8 年前

    你做得对你错过的就是 over(window expression) 在 lag

    val df = sc.parallelize(Seq((201601, 100.5),
      (201602, 120.6),
      (201603, 450.2),
      (201604, 200.7),
      (201605, 121.4))).toDF("date", "volume")
    
    val w = org.apache.spark.sql.expressions.Window.orderBy("date")  
    
    import org.apache.spark.sql.functions.lag
    
    val leadDf = df.withColumn("new_col", lag("volume", 1, 0).over(w))
    
    leadDf.show()
    
    +------+------+-------+
    |  date|volume|new_col|
    +------+------+-------+
    |201601| 100.5|    0.0|
    |201602| 120.6|  100.5|
    |201603| 450.2|  120.6|
    |201604| 200.7|  450.2|
    |201605| 121.4|  200.7|
    +------+------+-------+
    

    此代码在Spark shell 2.0.2上运行

        2
  •  2
  •   Sampat Kumar    9 年前

    您可以导入以下两个包,这将解决滞后依赖性的问题。

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