私は同じ問題に遭遇した、と今this答えを、以下のこと(RがList
として読み込み)Array
に(Rをデシリアライズすることはできません)確率DenseVector
を変換するSparkR:::callJMethod
を使用しています。それは非常にエレガントまたは高速ではないが、それは仕事をしていません:
denseVectorToArray <- function(dv) {
SparkR:::callJMethod(dv, "toArray")
}
例えば:あなたのスパークセッションが
#library(SparkR)
#sparkR.session(master = "local")
開始 おもちゃのデータに
data <- data.frame(clicked = base::sample(c(0,1),100,replace=TRUE),
someString = base::sample(c("this", "that"),
100, replace=TRUE),
stringsAsFactors=FALSE)
trainidxs <- base::sample(nrow(data), nrow(data)*0.7)
traindf <- as.DataFrame(data[trainidxs,])
testdf <- as.DataFrame(data[-trainidxs,])
電車ランダムフォレストと実行を生成します予測:
rf <- spark.randomForest(traindf,
clicked~.,
type = "classification",
maxDepth = 2,
maxBins = 2,
numTrees = 100)
predictions <- predict(rf, testdf)
は、あなたの予測を集める:
collected = SparkR::collect(predictions)
は今、確率を抽出します。
collected$probabilities <- lapply(collected$probability, function(x) denseVectorToArray(x))
str(probs)
勿論、SparkR:::callJMethod
周りの機能のラッパーはやり過ぎのビットです。直接使用することもできます(例: dplyr:
withprobs = collected %>%
rowwise() %>%
mutate("probabilities" = list(SparkR:::callJMethod(probability,"toArray"))) %>%
mutate("prob0" = probabilities[[1]], "prob1" = probabilities[[2]])