У меня есть следующий искровой DataFrame:Как использовать применять, чтобы найти максимум в каждой группе SparkR
agent_product_sale=data.frame(agent=c('a','b','c','d','e','f','a','b','c','a','b'),
product=c('P1','P2','P3','P4','P1','p1','p2','p2','P2','P3','P3'),
sale_amount=c(1000,2000,3000,4000,1000,1000,2000,2000,2000,3000,3000))
RDD_aps=createDataFrame(sqlContext,agent_product_sale)
agent product sale_amount
1 a P1 1000
2 b P1 1000
3 c P3 3000
4 d P4 4000
5 d P1 1000
6 c P1 1000
7 a P2 2000
8 b P2 2000
9 c P2 2000
10 a P4 4000
11 b P3 3000
Мне нужно сгруппировать Спарк DataFrame агентом и для каждого агента найти продукт с самым высоким sale_amount
agent most_expensive
a P4
b P3
c P3
d P4
Я использую следующий код, но он будет возвращать максимальное sale_amount для каждого агента
schema <- structType(structField("agent", "string"),
structField("max_sale_amount", "double"))
result <- gapply(
RDD_aps,
c("agent"),
function(key, x) {
y <- data.frame(key,max(x$sale_amount), stringsAsFactors = FALSE)
}, schema)
Попробуйте с 'which.max' – akrun
Или может быть' Б-г <- AGG (GroupBy (RDD_aps, RDD_aps $ агента); AGG (договоритесь (Gd, убывание (Gd $ sale_amount)), most_expensive = первый (gD $ product)) '(не тестировалось) – akrun
Возможно, я ошибаюсь, но вы можете снова вызвать' groupBy' после 'arr' – akrun