并行化不起作用sparkR

时间:2016-01-08 05:17:54

标签: r apache-spark sparkr

当我运行以下代码时:

rdd <- lapply(parallelize(sc, 1:10), function(x) list(a=x, b=as.character(x)))
df <- createDataFrame(sqlContext, rdd)

我收到一条错误消息

Error in lapply(parallelize(sc, 1:10), function(x) list(a = x, b = as.character(x))) : 
  could not find function "parallelize"

我可以创建数据框:

library(magrittr)
library(SparkR)
library(rJava)
Sys.setenv(SPARK_HOME="C:\\Apache\\spark-1.6.0-bin-hadoop2.6") 

.libPaths(c(file.path(Sys.getenv("SPARK_HOME"), "R", "lib"), .libPaths())) 

library("SparkR", lib.loc="C:\\Apache\\spark-1.6.0-bin-hadoop2.6\\lib")
library(SparkR) 

sc <- sparkR.init(master="local")
sqlContext <- sparkRSQL.init(sc)
localDF <- data.frame(name=c("John", "Smith", "Sarah"), age=c(19, 23, 18))
df <- createDataFrame(sqlContext, localDF)

为什么parrelelize不起作用?

2 个答案:

答案 0 :(得分:4)

Spark&lt; 2.0

它不起作用,因为自SparkR(Spark 1.4.0)第一次正式发布以来,RDD API已不再公开。您可以查看SPARK-7230(在SparkR for Spark 1.4中使RDD API专用)以获取详细信息。

虽然可以使用内部API(通过:::)访问其中一些方法,但您不应该依赖它。除了一些例外,当前代码库不再使用它们或主动维护它们。更重要的是,有多个已知问题不太可能被解决。

如果您对较低级别的R访问感兴趣,则应遵循SPARK-7264)SparkR API以实现并行功能)和SPARK-6817(R中的DataFrame UDF)。

Spark 2.0 +

Spark 2.0引入了一组方法(dapplygapplylapply),旨在在Spark DataFrame之上使用R UDF。

答案 1 :(得分:2)

您必须指定包SparkR。请尝试此代码

rdd <- SparkR:::lapply(SparkR:::parallelize (sc, 1:10), function(x) list(a=x, b=as.character(x)))