【问题标题】:To sort a specific column in a DataFrame in SparkR在 SparkR 中对 DataFrame 中的特定列进行排序
【发布时间】:2015-12-16 22:06:34
【问题描述】:

在 SparkR 中,我有一个 DataFrame data。它包含timegameid

head(data)

然后给出 ID = 1 4 1 1 215 985 ..., game = 1 5 1 10 和时间 2012-2-1, 2013-9-9, ... 现在game 包含一个游戏类型,它是从 1 到 10 的数字。

对于给定的游戏类型,我想找到最短时间,即第一次玩这个游戏。对于游戏类型 1,我这样做

data1 <- filter(data, data$game == 1)

这个新数据包含游戏类型 1 的所有数据。要找到我这样做的最短时间

g <- groupBy(data1, game$time)
first(arrange(g, desc(g$time)))

但这不能在 sparkR 中运行。它说“S4 类型的对象不可子集”。

游戏 1 已在 2012-01-02、2013-05-04、2011-01-04、... 我想找到最短时间。

【问题讨论】:

  • 你为什么首先按时间分组?您能否提供示例输入和预期输出?
  • 我举了一个例子。我按时间分组,因为我想对它使用 agg-function。
  • 使用聚合功能不需要groupBy

标签: r apache-spark sparkr


【解决方案1】:

如果你想要的只是一个最小值time 对整个数据集进行排序是没有意义的。你可以简单地使用min:

agg(df, min(df$time))

或针对每种类型的游戏:

groupBy(df, df$game) %>% agg(min(df$time))

【讨论】:

    【解决方案2】:

    通过输入

    arrange(game, game$time)
    

    我对所有time 进行了排序。通过使用first 函数,我得到了第一个条目。如果我想要最后一个条目,我只需输入这个

    first(arrange(game, desc(game$time)))
    

    【讨论】:

      【解决方案3】:

      澄清一下,因为这是我一直遇到的问题:您遇到的错误可能是因为您还将 dplyr 导入了您的环境。如果您使用SparkR::first(SparkR::arrange(g, SparkR::desc(g$time))),事情可能会很好(尽管显然查询可能会更有效)。

      【讨论】:

        猜你喜欢
        • 2022-01-21
        • 2020-01-21
        • 1970-01-01
        • 2019-03-06
        • 2022-12-11
        • 2015-12-16
        • 2017-09-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多