将插入符与 SparkR 一起使用?

Using Caret with SparkR?

可能有点类似于this question,SparkR dataframes 似乎与 caret 包不兼容。

当我尝试训练我的模型时,出现以下错误:

    Error in as.data.frame.default(data) : 
  cannot coerce class "structure("SparkDataFrame", package = "SparkR")" to a data.frame

有什么办法解决这个问题吗?下面是一个使用 iris 的可重现示例:

#load libraries
library(caret)
library(randomForest)
set.seed(42)

#point R session to Spark
Sys.setenv(SPARK_HOME = "your/spark/installation/here")
.libPaths(c(file.path(Sys.getenv("SPARK_HOME"), "R", "lib"), .libPaths()))

#load SparkR
library(SparkR)

#initialize Spark context
sc <- sparkR.init(master = "local",sparkEnvir = list(spark.driver.memory="2g"))

#initialize SQL context
sqlContext <- sparkRSQL.init(sc)

train2 <- createDataFrame(sqlContext, iris)

#train the model
model <- train(Species ~ Sepal_Length + Petal_Length,
               data = train2,
               method = "rf",
               trControl = trainControl(method = "cv", number = 5)

)

再一次,有什么办法解决这个问题吗?如果没有,使用 SparkR 进行机器学习的最直接途径是什么?

正如您发现的那样,您不能在 SparkDataFrames 上使用 caret 的训练方法。但是,您可以使用 Spark-ml 的算法,例如使用 SparkR::spark.randomForest:

训练随机森林分类器
#train the model
model <- spark.randomForest(train2,
                            type="classification",  
                            Species ~ Sepal_Length + Petal_Length,
                            maxDepth = 5,
                            numTrees = 100)

summary(model)