SparkR窗口功能

问题描述 投票:1回答:1

我从JIRA发现,SparkR的1.6版本已经实现了包括lagrank在内的窗函数,但over函数尚未实现。如何在lag(不是over方式)中使用没有SparkRSparkSQL函数等窗口函数?有人能提供一个例子吗?

r apache-spark apache-spark-sql window-functions sparkr
1个回答
6
投票

Spark 2.0.0+

SparkR为overwindow.partitionBy / partitionBywindow.orderBy / orderByrowsBetween / rangeBeteen函数提供DSL包装。

Spark <= 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

假设corresponding PR将合并而没有重大更改窗口定义,示例查询应如下所示:

w <- Window.partitionBy("y") %>% orderBy("x")
select(sdf, over(lag(sdf$z), w))
© www.soinside.com 2019 - 2024. All rights reserved.