2015-10-22 15 views
7

Attualmente sto cercando di implementare alcune funzioni utilizzando sparkR versione 1.5.1. Ho visto esempi più vecchi (versione 1.3), in cui le persone hanno usato la funzione apply su DataFrames, ma sembra che questo non sia più direttamente disponibile. Esempio:Utilizzo delle funzioni di applicazione in SparkR

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

Ora, posso utilizzare la funzione sapply sull'oggetto data.frame

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

Quando uso una logica simile sul dataframe

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

ottengo l'errore messaggio "Errore in as.list.default (X): nessun metodo per forzare questa classe S4 a un vettore"

Posso in qualche modo farlo?

risposta

0

Ciò è possibile con 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 

Nota hai bisogno di una funzione wrapper come questo perché non è possibile passare gli argomenti supplementari direttamente, ma che potrebbe cambiare in futuro.

Problemi correlati