我有一个这样的Spark Scala数据框
val df = Seq(
(10, 12),
(44, 14),
(32, 25),
(31, 24),
(75, 25),
(80, 20),
(35, 55),
(32, 25),
(67, 72),
(32, 21)
).toDF("x1","x2")
df.show()
+---+---+
| x1| x2|
+---+---+
| 10| 12|
| 44| 14|
| 32| 25|
| 31| 24|
| 75| 25|
| 80| 20|
| 35| 55|
| 32| 25|
| 67| 72|
| 32| 21|
+---+---+
我需要将此数据分为训练和测试,其中训练数据将是前8行(80%),测试数据将是后2行(20%)。
我尝试过val Array(train, test) = df.randomSplit(Array(0.8, 0.2))
,但是它是随机选择8行(而不是选择前8行)作为训练,而其他选择作为测试
所以有人可以建议如何选择我上面提到的分区吗?
谢谢
答案 0 :(得分:2)
也许有更好的方法,但是当您需要对数据进行排序时,我想到的没什么。
val cnt = df.count
val testSize = (0.2 * cnt).toInt
val trainSize = cnt - testSize
val trainDf = df.sort(monotonically_increasing_id).limit(trainSize)
val testDf = df.sort(monotonically_increasing_id.desc).limit(testSize)