r语言 - SparkR 窗口函数



我从JIRA中发现SparkR的1.6版本已经实现了包括lagrank在内的窗口功能,但over函数尚未实现。如何在没有over的情况下使用窗口函数lag SparkR(不是SparkSQL方式)?有人可以举个例子吗?

Spark 2.0.0+

SparkR为DSL包装器提供了overwindow.partitionBy/partitionBywindow.orderBy/orderByrowsBetween/rangeBeteen功能。

火花<= 1.6

不幸的是,这在 1.6.0 中是不可能的。虽然已经实现了某些窗口函数,包括lag,但SparkR还不支持窗口定义,这使得这些完全无用。

只要 SPARK-11395 未解析,唯一的选择就是使用原始 SQL:

set.seed(1)
hc <- sparkRHive.init(sc)
sdf <- createDataFrame(hc, data.frame(x=1:12, y=1:3, z=rnorm(12)))
registerTempTable(sdf, "sdf")
sql(hc, "SELECT x, y, z, LAG(z) OVER (PARTITION BY y ORDER BY x) FROM sdf") %>% 
  head()
##    x y          z        _c3
## 1  1 1 -0.6264538         NA
## 2  4 1  1.5952808 -0.6264538
## 3  7 1  0.4874291  1.5952808
## 4 10 1 -0.3053884  0.4874291
## 5  2 2  0.1836433         NA
## 6  5 2  0.3295078  0.1836433

假设相应的 PR 将在没有重大更改的情况下合并窗口定义和示例查询,应如下所示:

w <- Window.partitionBy("y") %>% orderBy("x")
select(sdf, over(lag(sdf$z), w))

相关内容

  • 没有找到相关文章

最新更新