如何在pyspark window()中使用毫秒作为参数函数之间的范围?

cyvaqqii  于 2021-05-29  发布在  Spark
关注(0)|答案(1)|浏览(563)

我想在pyspark中使用window()中的rangebetween函数,并将毫秒作为参数。
我试着这么做:

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

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

但是,由于rangebetween方法中的float参数(-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)之间创建这些窗口?

  • timestamp \u ms是一列具有毫秒分辨率的时间戳
  • 日期栏的日期格式为:“2019-07-26 08:56:07.171”

谢谢!

beq87vna

beq87vna1#

我这样解决了这个问题:

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\u ms”列乘以1000,就会得到一列时间戳,其分辨率为毫秒。现在我可以使用rangebetween(-0.1秒,0)来创建window()。

相关问题