2015-10-22 9 views
7

Ich versuche derzeit, einige Funktionen mit SparkR Version 1.5.1 zu implementieren. Ich habe ältere (Version 1.3) Beispiele gesehen, in denen Leute die Anwendungsfunktion in DataFrames verwendet haben, aber es sieht so aus, als wäre diese nicht mehr direkt verfügbar. Beispiel:Verwenden von Anwendungsfunktionen in SparkR

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

Nun kann ich die Funktion sapply auf dem data.frame Objekt verwenden

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

Wenn ich eine ähnliche Logik auf dem

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

ich den Fehler Meldung "Fehler in as.list.default (X): keine Methode zum Erzwingen dieser S4-Klasse zu einem Vektor"

Kann ich das irgendwie machen?

Antwort

0

Dies ist mit user defined functions in Spark 2.0 möglich.

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 

Hinweis benötigen Sie eine Wrapper-Funktion so, weil Sie nicht die zusätzlichen Argumente direkt passieren können, aber das in Zukunft ändern kann.