【问题标题】:SparkR window functionSparkR 窗口函数
【发布时间】:2016-04-25 11:15:11
【问题描述】:

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

【问题讨论】:

    标签: r apache-spark apache-spark-sql window-functions sparkr


    【解决方案1】:

    Spark 2.0.0+

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

    火花

    不幸的是,这在 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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-08
      • 2014-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-15
      • 2015-10-12
      • 2015-08-28
      相关资源
      最近更新 更多