我正在努力使一个简单的sparkR示例启动并运行,但无法使其工作。我想做的就是获取一个列表,将其并行化,然后在SparkR中运行一个函数。我还没能找到一个简单的例子来说明如何在spark 1.6中做到这一点——似乎有很多方法可以做到这一点,但似乎没有一个是有效的。我正在尝试在sparkR控制台运行这个:
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
createDataFrame
自1.6
起更名为as.DataFrame
。
在r中正确地创建一个Spark DataFrame
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
是在Spark 2中添加的。X,如果这是你想用的函数。