繁体   English   中英

SparkR窗口功能

[英]SparkR window function

我从JIRA中发现, SparkR 1.6发行版已实现了包括lagrank窗口函数,但尚未实现over函数。 如何在SparkR使用像lag函数这样的窗口函数而不会over (不是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))

暂无
暂无

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

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