2015-10-22 14 views
7

現在、sparkRバージョン1.5.1を使用していくつかの関数を実装しようとしています。 DataFramesでapply関数を使用した古い(バージョン1.3)の例を見てきましたが、これはもはや直接利用できないようです。例:私はエラーを取得するDATAFRAMESparkRでの適用関数の使用

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

に同様のロジックを使用する場合は今

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

は、私はdata.frameオブジェクト

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

に機能sapplyを使用することができますメッセージ "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 

余分な引数を直接渡すことはできないが、将来変更される可能性があるため、このようなラッパー関数が必要です。

関連する問題