spark sql窗口函数滞后

时间:2016-12-15 06:53:55

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

我正在查看Spark SQL,Scala中的Spark DataFrame的窗口滑动功能。

我有一个包含Col1,Col1,Col1,date。

列的数据框
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`

现在我想添加一个名为(new_col)的新列,其中一行向下滑动,如上所示。

我在下面尝试使用窗口功能。

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

任何人都可以帮我解决这个问题。

2 个答案:

答案 0 :(得分:22)

您在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| +------+------+-------+ 上所做的一切都是正确的
 <select class="form-control" name="role" ng-model="filterCriteria.ObjectName"
    ng-options="item.name as item.name for item in filterCriteriaObjets" ng-required="true" ng-change="getObjectInfo()">
    <option value="">- Select Filter Name -</option>
    </select>

此代码在Spark shell 2.0.2上运行

答案 1 :(得分:2)

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

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