繁体   English   中英

如何使用DataFrames在PySpark中使用窗口函数?

[英]How to use window functions in PySpark using DataFrames?

试图弄清楚如何在PySpark中使用窗口函数。 这是我希望能够做的一个例子,只计算用户有“事件”的次数(在这种情况下,“dt”是模拟时间戳)。

from pyspark.sql.window import Window
from pyspark.sql.functions import count

df = sqlContext.createDataFrame([{"id": 123, "dt": 0}, {"id": 123, "dt": 1}, {"id": 234, "dt":0}, {"id": 456, "dt":0}, {"id": 456, "dt":1}, {"id":456, "dt":2}])
df.select(["id","dt"], count("dt").over(Window.partitionBy("id").orderBy("dt")).alias("count")).show()

这会产生错误。 使用窗口函数的正确方法是什么? 我读到1.4.1(我们需要使用的版本,因为它是AWS上的标准版本)应该能够使用DataFrame API来实现它们。

FWIW,关于这个主题的文档很少。 我无法让任何实例运行。

它会抛出异常,因为您传递了列的列表。 DataFrame.select签名如下所示

df.select(self, *cols)

并且使用窗口函数的表达式就像任何其他列一样,所以你需要的是这样的:

w = Window.partitionBy("id").orderBy("dt") # Just for clarity
df.select("id","dt", count("dt").over(w).alias("count")).show()

## +---+---+-----+
## | id| dt|count|
## +---+---+-----+
## |234|  0|    1|
## |456|  0|    1|
## |456|  1|    2|
## |456|  2|    3|
## |123|  0|    1|
## |123|  1|    2|
## +---+---+-----+

一般而言,Spark SQL窗口函数的行为与任何现代RDBMS中的行为完全相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM