我正在努力让一个简单的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一起工作。
发布于 2016-10-18 22:55:11
自1.6
以来,createDataFrame
已重命名为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
是在Spark2.x中添加的,如果这是您试图使用的函数。
https://stackoverflow.com/questions/40119294
复制相似问题