Чтобы отсортировать определенный столбец в DataFrame в SparkR

В SparkR у меня есть DataFrame data. Он содержит time, game и id.

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 была сыграна 02.01.2012, 04.05.2013, 04.01.2011,... Я хочу найти минимальное время.


person Ole Petersen    schedule 15.09.2015    source источник
comment
Почему вы группируете по времени в первую очередь? Не могли бы вы привести пример ввода и ожидаемый результат?   -  person zero323    schedule 15.09.2015
comment
Я привел пример. Я группирую по времени, т.к. хочу использовать к нему agg-функцию.   -  person Ole Petersen    schedule 15.09.2015
comment
Вам не нужно groupBy для использования функции агрегирования.   -  person zero323    schedule 15.09.2015


Ответы (3)


Если все, что вам нужно, это минимум time, сортировка всего набора данных не имеет смысла. Вы можете просто использовать min:

agg(df, min(df$time))

или для каждого типа игры:

groupBy(df, df$game) %>% agg(min(df$time))
person zero323    schedule 15.09.2015

Набрав

arrange(game, game$time)

Я разобрался со всеми time. Взяв функцию first, я получаю первую запись. Если мне нужна последняя запись, я просто набираю это

first(arrange(game, desc(game$time)))
person Ole Petersen    schedule 15.09.2015

Просто чтобы уточнить, потому что это то, с чем я постоянно сталкиваюсь: ошибка, которую вы получали, вероятно, связана с тем, что вы также импортировали dplyr в свою среду. Если бы вы использовали SparkR::first(SparkR::arrange(g, SparkR::desc(g$time))), все, вероятно, было бы хорошо (хотя, очевидно, запрос мог бы быть более эффективным).

person Niels    schedule 16.12.2015