首页 文章

当逻辑和滞后窗函数时,Spark 1.5.0(PySpark)情况

提问于
浏览
0

我试图在HiveContext中使用Spark SQL函数'WHEN / OTHERWISE'以及窗口中的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

尝试使用“sqlContext.sql(”选择CASE WHEN ... lag(num_count)OVER ...“)会不会更好?

1 回答

  • 2

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

    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'))
    )
    

相关问题