簡體   English   中英

如何在 PySpark window() 中使用毫秒作為參數。 function 之間的范圍?

[英]How to use milliseconds as an argument in PySpark window(). rangebetween function?

我想在 PySpark 中的 Window() 中使用 function 之間的范圍,並以毫秒為參數。

我正在嘗試這樣做:

df = df.withColumn("timestamp_ms", F.col("Dates").cast("double"))


w = (Window().orderBy("timestamp_ms").rangeBetween(-0.1, 0.0))

但是,由於 rangeBetween 方法中的浮點參數(-0.1),我得到了一個錯誤。

py4j.protocol.Py4JError: An error occurred while calling o73.rangeBetween. Trace:
py4j.Py4JException: Method rangeBetween([class java.lang.Double, class java.lang.Double]) does not exist
        at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:318)
        at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:326)
        at py4j.Gateway.invoke(Gateway.java:274)
        at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
        at py4j.commands.CallCommand.execute(CallCommand.java:79)
        at py4j.GatewayConnection.run(GatewayConnection.java:238)
        at java.lang.Thread.run(Thread.java:748)

有沒有其他方法可以在(-0.1 秒,0)之間創建這些 windows?

*timestamp_ms 是一列具有毫秒分辨率的時間戳

*Dates 是具有以下格式的日期的列:“2019-07-26 08:56:07.171”

謝謝!

我這樣做解決了這個問題:

df = df.withColumn("timestamp_ms", F.col("Dates").cast("double"))

df = df.withColumn("timestamp_ms", F.col("timestamp_ms")*1000)

w = (Window().orderBy("timestamp_ms").rangeBetween(-100, 0))

我注意到,如果我將“timestamp_ms”列乘以 1000,我將在 integer dtype 中得到一列時間戳,分辨率為毫秒。 現在我可以使用 rangeBetween (-0.1 secs, 0) 來創建 Window()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM