2016-12-07 3 views
0

Я создал фрейм данных из mtcars. Я делаю группу по gear и cyl. то я рассчитываю max для hp и disp. что-то не так в группе, так как там должно быть 8 групп. пока я получаю только 6 групп.Groupby in sparkR не дает желаемых результатов

library(sparkR) 
xx=as.DataFrame(sqlContext, data = mtcars) 

head(agg(groupBy(xx, "gear", "cyl"), hp = 'max')) 
    gear cyl max(hp) 
1 3 8  245 
2 5 4  113 
3 3 4  97 
4 4 4  109 
5 5 6  175 
6 3 6  110 

Update 1:

Я другой запрос, в документации groupby мы имеем пример, как:

## Examples 

## Not run: 
    # Compute the average for all numeric columns grouped by department. 
    avg(groupBy(df, "department")) 

    # Compute the max age and average salary, grouped by department and gender. 
    agg(groupBy(df, "department", "gender"), salary="avg", "age" -> "max") 

## End(Not run) 

аналогично для mtcars я придумал

agg(groupBy(xx, "gear", "cyl"), qsec ="avg", "disp" -> "max") 

Во-первых, я понимаю, что мы получите максимум disp, но код, похоже, не работает. Он выдает ошибку следующим образом. Во-вторых, код работает с = вместо ->. Так есть опечатка или что-то в этом роде.

unable to find an inherited method for function ‘groupBy’ for signature ‘"function"’ 

My SparkR версия SparkR_1.6.1.

ответ

1

Ваше агрегирование хорошо, но вы сначала добавляете «голову», он покажет вам только первые 6 строк. Вам нужно заменить его на сбор. так:

df <- as.DataFrame(mtcars) 
gp = agg(groupBy(df, df$gear, df$cyl), hp = 'max') 
collect(gp) 

Справедливое замечание, я использую искру 2.0.2

+0

Oh. как я мог пропустить «голову». Спасибо за совет по 'collect'. –

+0

Не могли бы вы посмотреть обновление. –

+0

Пожалуйста, можете ли вы рассказать, что является вашей искровой версией, и если значительная «disp» -> «max» - это просто получить максимальную переменную disp, вам просто нужно заменить ее на «=». –