2015-10-22 72 views
7

我目前正在嘗試使用sparkR版本1.5.1來實現一些函數。我見過較老的(版本1.3)示例,其中人們在DataFrame上使用了apply函數,但看起來這不再是直接可用的。例如:在SparkR中使用apply函數

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) 

上當我使用的數據幀

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 

請注意,您需要這樣的包裝函數,因爲您不能直接傳遞額外的參數,但將來可能會更改。

相關問題