2016-10-18 18 views
0

私は単純なsparkRのサンプルを起動して動作させることに取り組んでおり、動作させることはできません。私がしたいのは、リストを作成してパラレル化し、SparkRで関数を実行することだけです。私は火花1.6でこれを行うための道を行く単純な例を見つけることができませんでした - それを行う多くの方法があるようだが、それらのどれもうまくいかないようです。私はsparkRコンソールでこれを実行しようとしています:シンプルなSparkR 1.6の例

fxntest<- function(i){ 
    m = matrix(runif(4000*4000),4000) 
    return(system.time(m %*% m)) 
} 

a<-c(1,1,1,1,1,3) 
b<-as.list(a) 

sdf <- createDataFrame(sqlContext, b) 
testtimes <- lapply(sdf, fxntest) 
testtimelist <- collect(testtimes) 
testtimelist 

これはlapplyが呼び出されているときに私が取得していますエラーです:

Error in as.list.default(X) : 
    no method for coercing this S4 class to a vector 

私が探しています何を取得する非常に簡単な例でありますこの作業 - 私はpyspark良い量を使用しているが、これはR.

+0

エラーは「lapply」に表示されます。それは何ですか?それは全く「i」を使用していません –

+0

私はちょうどその機能を別の労働者の間で並行して実行したいと思っています - 私は "私"を無視していることを知っています。 – TH22

答えて

0

createDataFrameでの作業を取得することができていないが1.6以来as.DataFrameに変更されました。

はこれを正しくそれはRのオブジェクトではないこと、しかし

sdf <- as.DataFrame(sqlContext, list(1,1,1,1,1,3)) 

R.

でスパークデータフレームを作成するために動作します。組み込みのR lapplyは、通常のリスト、配列、ベクトルなどに作用します。

Sparkでこれを実行すると、何も得られません。実行している計算はクラスタ全体で並列化されません。行列の乗算は単一のマシン上で行われます。また、Sparkライブラリはまったく使用されていません。ここで

には、例えば、

fxntest<- function(i){ 
    m = matrix(runif(4000*4000),4000) 
    return(system.time(m %*% m)) 
} 

testtimes <- lapply(list(1,1,1,1,1,3), fxntest) 

注作業コードです:それはあなたが使用しようとしていた機能がある場合spark.lapplyがスパーク2.xの中に追加されました。

+0

お返事ありがとうございます。私はそれが並列化されていないことを知っています - それは私がやろうとしていることです!私はspark.lapplyのように動作しているものを得ようとしていますが、sparkR 1.6では動作するものは得られませんでした。この考え方は、これらの行列乗算を並行して実行することです。 – TH22