Использование функции суммы для получения значения в sparkR

У меня есть "данные" DataFrame в sparkR, которые содержат ID = 1,2,.. и количество = 232, 303, 444, 10,... Я хочу проверить, превышает ли сумма суммы 5000.

sum(data$amount ) > 5000

Теперь sparkR должен возвращать TRUE, если это TRUE и FALSE в противном случае, но все, что я получаю, это это сообщение

Column (SUM(amount)>5000)

Как я могу проверить, правда ли это?


person Ole Petersen    schedule 25.08.2015    source источник


Ответы (1)


Возможно, это не лучшее решение, но оно работает. Вы создали столбец из 1 элемента, но я не нашел способа получить результат, хранящийся в этом элементе, поэтому я применил другой подход:

df   <- data.frame(ID=c(1,2,3,4),amount=c(232, 303, 444, 10))
data <- createDataFrame(sqlContext,df)

data <- withColumn(data, "constant", data$ID * 0)

sumFrame <- agg(groupBy(data, data$constant), sumAmount = sum(data$amount))

localResult <- collect(sumFrame)
localResult$sumAmount > 5000

При таком подходе я создаю DataFrame из 1 строки, но для получения результата можно собрать DataFrame.

person Wannes Rosiers    schedule 27.08.2015
comment
Моя проблема в том, что для выполнения функции сбора требуется время, особенно когда мне нужно делать это много раз. Можно ли это сделать без использования функции collect? - person Ole Petersen; 27.08.2015
comment
Что ты конкретно имеешь ввиду? Это не функция сбора, которая требует времени: из-за ленивой оценки это первое место, где фактически оценивается код. И почему вы хотите запускать этот код несколько раз? - person Wannes Rosiers; 27.08.2015
comment
Если я просто запускаю его 1 раз, это все равно занимает много времени. Более 1 мин. - person Ole Petersen; 27.08.2015
comment
Поскольку сбор — это единственное место, где ваш код действительно будет выполняться, другие подходы займут столько же времени. - person Wannes Rosiers; 27.08.2015