【问题标题】:SparkR - Retaining the previous value in another columnSparkR - 在另一列中保留先前的值
【发布时间】:2016-10-06 01:43:21
【问题描述】:

我有一个如下所示的 spark dataFrame:

  id      dates value
1 11 2013-11-15    10
2 11 2013-11-16    15
3 22 2013-11-15    20
4 22 2013-11-16    21
5 22 2013-11-17     3

我希望保留每个 id 上一个日期的值。

最终的结果应该是这样的:

  id      dates value prev_value
1 11 2013-11-15    10        NA
2 11 2013-11-16    15        10
3 22 2013-11-15    20        NA
4 22 2013-11-16    21        20
5 22 2013-11-17     3        21

this question 的解决方案由于各种原因无法正常工作。

非常感谢您的帮助!

【问题讨论】:

标签: sparkr


【解决方案1】:

所以在玩了一段时间后,这是我找到的解决方法:

首先,这里是示例 DF

id<-c(11,11,22,22,22)
dates<-as.Date(c('2013-11-15','2013-11-16','2013-11-15','2013-11-16','2013-11-17'), "%Y-%m-%d")
value <- c(10,15,20,21,3)

example<-as.DataFrame(data.frame(id=id,dates=dates, value))

我复制示例 DF 并在原始日期上添加 1 天,然后重命名该列

example_p <- example
example_p$dates <- date_add(example_p$dates, 1)
colnames(example_p) <- c("id", "dates", "prev_value")

最后,我将新的 DF 合并到原来的 DF 中

result <- select(merge(example, example_p, by = intersect(names(example),names(example_p))
              , all.x = T), c("id_x", "dates_x", "value", "prev_value"))

showDF(result)

+----+----------+-----+----------+
|id_x|   dates_x|value|prev_value|
+----+----------+-----+----------+
|22.0|2013-11-15| 20.0|      null|
|11.0|2013-11-15| 10.0|      null|
|11.0|2013-11-16| 15.0|      10.0|
|22.0|2013-11-16| 21.0|      20.0|
|22.0|2013-11-17|  3.0|      21.0|
+----+----------+-----+----------+

显然,这有点笨拙,我很乐意为任何可以提出比这更快的解决方案的人加分。

【讨论】:

    猜你喜欢
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多