[英]SparkR window function
我从JIRA中发现, SparkR
1.6发行版已实现了包括lag
和rank
窗口函数,但尚未实现over
函数。 如何在SparkR
使用像lag
函数这样的窗口函数而不会over
(不是SparkSQL
方式)? 有人可以提供例子吗?
Spark 2.0.0+
SparkR为DSL包装器提供over
, window.partitionBy
/ partitionBy
, window.orderBy
/ orderBy
和rowsBetween
/ 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))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.