2015-10-22 2 views
7

В настоящее время я пытаюсь реализовать некоторые функции с использованием sparkR версии 1.5.1. Я видел более старые версии (версии 1.3), где люди использовали функцию apply в DataFrames, но похоже, что это больше не доступно напрямую. Пример:Использование функций применения в SparkR

x = c(1,2) 
xDF_R = data.frame(x) 
colnames(xDF_R) = c("number") 
xDF_S = createDataFrame(sqlContext,xDF_R) 

Теперь я могу использовать функцию sapply на объекте data.frame

xDF_R$result = sapply(xDF_R$number, ppois, q=10) 

Когда я использую подобную логику на DataFrame

xDF_S$result = sapply(xDF_S$number, ppois, q=10) 

я получаю ошибку сообщение «Ошибка в as.list.default (X): нет метода для приведения этого класса S4 к вектору«

Могу ли я как-то это сделать?

ответ

0

Это возможно с user defined functions in Spark 2.0.

wrapper = function(df){ 
+  out = df 
+  out$result = sapply(df$number, ppois, q=10) 
+  return(out) 
+ } 
> xDF_S2 = dapplyCollect(xDF_S, wrapper) 
> identical(xDF_S2, xDF_R) 
[1] TRUE 

Примечание вам нужна функция обертку, как это потому, что вы не можете передать дополнительные аргументы непосредственно, но это может измениться в будущем.

Смежные вопросы