Spark 1.5.0(PySpark)案例当Logic&滞后窗函数

时间:2016-01-25 23:15:23

标签: apache-spark pyspark apache-spark-sql pyspark-sql

我正在尝试使用Spark SQL函数' WHEN / OTHERWISE'在HiveContext中,与窗口中的LAG一起,为某些连续分钟数据中的升序数字计数字段创建DIFF字段,该字段经常重置为零。所以我需要纠正'计数'重置为零。

所以我的代码如下:

window = Window.partitionBy("car","trip_id").orderBy("car","datetime")
df = df.withColumn('new_count', F.when(df.num_count >= F.lag(df.num_count),(df.num_count- F.lag(df.num_count))).otherwise(df.num_count.astype('long')).over(window))

我在Pyspark的错误是在说:

: java.lang.UnsupportedOperationException: CASE WHEN ...<"variable names">...  is not supported in window operation

尝试使用&#34; sqlContext.sql(&#34;选择CASE WHEN ... lag(num_count)OVER ...&#34;)会更好吗?

1 个答案:

答案 0 :(得分:3)

窗口应单独应用于每个窗口功能。在这种特殊情况下,您可以简单地提取如下表达式:

num_count_lag = F.lag(df.num_count).over(window)

df.withColumn(
    'new_count',
    F.when(
        df.num_count >= num_count_lag,
        df.num_count - num_count_lag
    ).otherwise(df.num_count.astype('long'))
)