私はこのようになり、データを持っている:Pyspark - タイムスタンプ値にlagとrangeBetween関数を使用するにはどうすればよいですか?
userid,eventtime,location_point
4e191908,2017-06-04 03:00:00,18685891
4e191908,2017-06-04 03:04:00,18685891
3136afcb,2017-06-04 03:03:00,18382821
661212dd,2017-06-04 03:06:00,80831484
40e8a7c3,2017-06-04 03:12:00,18825769
私は同じlocation_point
で5分ウィンドウ内の2以上userid
がある場合にtrueをマークし、新たなブール列を追加したいと思います。私はuserid
で仕切られた窓をオーバールックアップするlag
機能を使用してのアイデアを持っていたし、現在のタイムスタンプと次の5分の間の範囲で:私が使用している場合
from pyspark.sql import functions as F
from pyspark.sql import Window as W
from pyspark.sql.functions import col
days = lambda i: i * 60*5
windowSpec = W.partitionBy(col("userid")).orderBy(col("eventtime").cast("timestamp").cast("long")).rangeBetween(0, days(5))
lastURN = F.lag(col("location_point"), 1).over(windowSpec)
visitCheck = (last_location_point == output.location_pont)
output.withColumn("visit_check", visitCheck).select("userid","eventtime", "location_pont", "visit_check")
このコードは、私に解析例外を与えていますRangeBetween機能:
AnalysisException:CURRENT ROW 1500 BETWEEN u'Windowフレーム範囲以下は、PRECEDING を前後1 1との間に必要なフレームROWSと一致する必要があります。
この問題に対処する方法はありますか?