SparkR - 为数据挖掘创建测试和训练数据帧

SparkR - Creating Test and Train DataFrames for Data Mining

我希望将 SparkR DataFrame 分成两个子集,一个用于训练,一个用于测试 glim。

我在 R 中执行此操作的常规方法是创建行的数组索引,将数组采样到新数组中,然后根据行是否在子集中对数据进行子集化。例如

seed=42 # of course
index <- 1:nrow(df) # sample works on vectors
trainindex <- sample(index, trunc(length(index)/2)) # split data set into two
train <- df[trainindex, ] # training data set
test <- df[-trainindex, ] # all the records not in the training data set

这种方法似乎不适用于 SparkR 数据帧,因为行不像在 R 中那样是唯一可寻址的。

由于数据集的分区是数据挖掘的一项基本技术,有没有人开发出一种随机分区 DataFrame 行的方法?

基于这个想法,我似乎在工作时不断地在 R data.frames 和 Spark DataFrames 之间来回切换。用相似数据帧的多个副本填满内存似乎是不可取的。对于将 SparkR DataFrames 用于数据挖掘项目的一般方法,有没有人有好的建议?例如,使用 R data.frames 执行直到阶段 X 的所有任务,然后切换到 Spark DataFrames?

我找到了问题第一部分的答案(第二部分需要更长的时间)。对于那些关注...

sdfData <- createDataFrame(sqlContext, index)
train <- sample(sdfData, withReplacement=FALSE, fraction=0.5, seed=42)
test <- except(sdfData, train)

关于你的第一个问题:从Spark 2.0.0开始,你可以使用randomSplit:

sdfData <- createDataFrame(sqlContext, index)
trainTest <-randomSplit(rfData,c(0.7,0.3), seed)
train = trainTest[[1]]
test = trainTest[[2]]