Spark 1.5.0 (PySpark) Case When Logic & Lag Window 函数
Spark 1.5.0 (PySpark) Case When Logic & Lag Window Function
我正在尝试使用 HiveContext 中的 Spark SQL 函数 'WHEN / OTHERWISE' 以及 Window 中的 LAG,为中的升序数字计数字段创建 DIFF 字段一些连续的分钟数据,经常重置为零。所以我需要更正 'counts' 重置为零。
所以我的代码如下:
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("Select CASE WHEN...lag(num_count) OVER...") 会更好吗?
Window 应单独应用于每个 window 函数。在这种特殊情况下,您可以像这样简单地提取表达式:
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'))
)
我正在尝试使用 HiveContext 中的 Spark SQL 函数 'WHEN / OTHERWISE' 以及 Window 中的 LAG,为中的升序数字计数字段创建 DIFF 字段一些连续的分钟数据,经常重置为零。所以我需要更正 'counts' 重置为零。
所以我的代码如下:
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("Select CASE WHEN...lag(num_count) OVER...") 会更好吗?
Window 应单独应用于每个 window 函数。在这种特殊情况下,您可以像这样简单地提取表达式:
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'))
)