将插入符与 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)
可能有点类似于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)