当我运行以下代码时:
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不起作用?
答案 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引入了一组方法(dapply
,gapply
,lapply
),旨在在Spark DataFrame
之上使用R UDF。
答案 1 :(得分:2)
您必须指定包SparkR。请尝试此代码
rdd <- SparkR:::lapply(SparkR:::parallelize (sc, 1:10), function(x) list(a=x, b=as.character(x)))