Apache spark 按特定列排序时基于比率拆分数据帧

Apache spark 按特定列排序时基于比率拆分数据帧,apache-spark,Apache Spark,我需要在spark中基于给定比率使用scala分割数据帧。这应该通过一个名为ts的特定列在dataframe的排序版本上完成。第一个比率用于培训,lats部分用于验证 val dataframe=//a sample dataframe val trainRatio=0.8; val training=//dataframe.rdd.orderBy("ts") val test=// 有人能告诉我怎么做吗?首先按您想要的列对df进行排序 val sortdf =df.sort($"ts".de

我需要在spark中基于给定比率使用scala分割数据帧。这应该通过一个名为ts的特定列在dataframe的排序版本上完成。第一个比率用于培训,lats部分用于验证

val dataframe=//a sample dataframe
val trainRatio=0.8;
val training=//dataframe.rdd.orderBy("ts")
val test=//

有人能告诉我怎么做吗?

首先按您想要的列对df进行排序

val sortdf =df.sort($"ts".desc)

val Array(training_data, validat_data) = sortdf .randomSplit(Array(0.8,0.2))

我猜我的答案是,首先,我需要在RDD中找到一个百分位值,然后一些简单的映射函数将正确地划分RDD。

您可以尝试下面的代码,但任何好的解决方案都非常受欢迎

val conf = new SparkConf().setAppName("testApp").setMaster("local")
val sc = new SparkContext(conf)
val data = sc.parallelize(Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
val count = data.count()
val trainRatio = 0.8
val trainSize = math.round(count * trainRatio).toInt

val trainingRdd = data
  .zipWithIndex()
  .filter { case (_, index) => index < trainSize }
  .map { case (row, _) => row }
trainingRdd.foreach(println)
val testRdd = data
  .zipWithIndex()
  .filter { case (_, index) => index >= trainSize }
  .map { case (row, _) => row }
testRdd.foreach(println)
val conf=new SparkConf().setAppName(“testApp”).setMaster(“本地”)
val sc=新的SparkContext(配置)
val data=sc.parallelize(数组(1,2,3,4,5,6,7,8,9,10))
val count=data.count()
val trainRatio=0.8
val trainSize=数学舍入(计数*列车比率).toInt
val trainingRdd=数据
.zipWithIndex()
.filter{case(u,index)=>indexrow}
培训费(打印费)
val testRdd=数据
.zipWithIndex()
.filter{case(u,index)=>index>=trainSize}
.map{case(row,{)=>row}
testRdd.foreach(println)

这是您需要的或其他任何东西??假设我的RDD为(1,2,3,4,5,6,7,8,9,10)…使用0.8的比率,我应该得到(1,2,3,4,5,6,7,8)的RDD用于训练,另一个RDD为(9,10)用于测试,您建议的答案再次给我随机值。@学习者我只有11个值,我在[0.6,0.3,0.1]上进行了拆分,但是将它除以[6,5,0]或[8,3,0]我不需要零,因为11仍然可以被除以[6,3,2]在火车上拆分后,有没有办法检查不为零,测试和验证您应该首先对RDD排序!是@Luckylukee,如果您想对整个RDD进行排序。如果此解决方案解决了您的问题,请将其标记为已回答,好吗?