在 SparkR 中对 DataFrame 中的特定列进行排序

To sort a specific column in a DataFrame in SparkR

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

head(data)

然后给出ID = 1 4 1 1 215 985 ..., game = 1 5 1 10 and time 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 中 运行。它说 "object of type S4 is not subsettable".

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

通过输入

arrange(game, game$time)

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

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

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

agg(df, min(df$time))

或每种类型的游戏:

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

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