pyspark - Databricks 中 pyspark 中对有序窗口求和的问题
问题描述
编辑:我明白了。我一直在阅读文档很差,因为有序窗口的默认框架是 rangeFrame 而不是 rowFrame。
首先,我要感谢这个社区提出的精彩问题和答案。我学习 pyspark 才几个月,我发现这个网站真的很有帮助。
我在 Databricks 中使用 spark 2.4.5。
根据将 Window 与 OrderBy 一起使用时的文档,默认情况下框架应为 unboundedPreceding、currentRow。但这似乎并非如此,或者这些是其他错误。当我明确定义框架时,我得到的结果与依赖默认值时不同。
这是一个示例代码:
import pyspark.sql.functions as F
import pyspark.sql.window as W
df = spark.range(0, 1000)
#partitionBy and orderBy columns
for k in ['a','e']:
df=df.withColumn(k, (F.rand()*10).cast('int'))
#column for the sum, 0's and 1's
df=df.withColumn('o', (F.round(F.pow(F.rand(),10)) ).cast('int'))
#two ways to count the sum
w=W.Window.partitionBy('a').orderBy('e').rowsBetween(W.Window.unboundedPreceding, W.Window.currentRow)
df = df.withColumn('sum', F.sum('o').over(w))
w2=W.Window.partitionBy('a').orderBy('e')
df = df.withColumn('sum2', F.sum('o').over(w2))
display(df.orderBy('a','e', 'sum'))
如果您比较 sum 和 sum2 值,您会发现它们并不总是相同的。所以我的问题是:这真的是一个错误还是我误解了某些东西,或者在 Databricks 中是否存在不同的默认值
解决方案
推荐阅读
- c++ - 即使主窗口关闭,应用程序也不会退出
- javascript - JavaScript:等待第 3 方组件可用
- dynamic-programming - 计算回文子串的数量
- python - 赋值前引用的局部变量“board”
- linux - 程序如何在操作系统的控制下运行
- angular - 相互依赖的角度多个 APP_INITIALIZER
- linux - 如何制作 crontab housekeep 脚本以删除 redhat 7 目录中超过 60 天的文件
- python-3.x - 这种字符串反转背后的逻辑是什么?
- php - 无法在 PHP 中上传文件
- html - Bootstrap navbar 不显示折叠 div 和 navbar-nav 列表