如何在Apache Spark上进行非随机数据集分裂



我知道我可以使用随机分配方法进行随机分裂:

val splittedData: Array[Dataset[Row]] = 
        preparedData.randomSplit(Array(0.5, 0.3, 0.2))

我可以使用一些"非朗姆语方法"?

将数据分为连续的零件。

Apache Spark 2.0.1。预先感谢。

upd:数据顺序很重要,我将在具有"较小ID"的数据上训练我的模型,并在具有"较大ID"的数据上对其进行测试。因此,我想将数据拆分为连续的零件而不会改组。

,例如

my dataset = (0,1,2,3,4,5,6,7,8,9)
desired splitting = (0.8, 0.2)
splitting = (0,1,2,3,4,5,6,7), (8,9)

我唯一能想到的解决方案是使用 count limit ,但可能有一个更好的。

这是我实现的解决方案:数据集 -> rdd-> dataset。

我不确定这是否是最有效的方法,所以我很高兴接受更好的解决方案。

val count = allData.count()
val trainRatio = 0.6  
val trainSize = math.round(count * trainRatio).toInt
val dataSchema = allData.schema
// Zipping with indices and skipping rows with indices > trainSize.
// Could have possibly used .limit(n) here
val trainingRdd =
  allData
    .rdd
    .zipWithIndex()
    .filter { case (_, index) => index < trainSize }
    .map { case (row, _) => row }
// Can't use .limit() :(
val testRdd =
allData
  .rdd
  .zipWithIndex()
  .filter { case (_, index) => index >= trainSize }
  .map { case (row, _) => row }
val training = MySession.createDataFrame(trainingRdd, dataSchema)
val test = MySession.createDataFrame(testRdd, dataSchema)

相关内容

  • 没有找到相关文章