我从JIRA中发现,SparkR的1.6个版本已经实现了包括lag和rank在内的窗口函数,但over函数尚未实现。如何使用像lag函数那样的窗口函数而不使用SparkR中的over (而不是SparkSQL方式)?有人能举个例子吗?
发布于 2016-01-20 06:03:04
星火2.0.0+
SparkR为DSL包装器提供了over、window.partitionBy / partitionBy、window.orderBy / orderBy和rowsBetween / rangeBeteen函数。
火花<= 1.6
不幸的是,在1.6.0中是不可能的。虽然一些窗口函数(包括lag )已经实现,但SparkR还不支持窗口定义,这使得这些定义完全无用。
只要火花-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))https://stackoverflow.com/questions/34885981
复制相似问题