о разделении данных в тесте на поезд-тест scala - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть искробезопасный 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 строк) в качестве обучения, а другие - в качестве тестирования

Так что кто-нибудь может подсказать, как выбрать разделы, как я упомянутый выше ?

Спасибо

1 Ответ

2 голосов
/ 09 апреля 2020

Может быть, есть лучший способ, но мне больше ничего не приходит в голову, поскольку вам нужны данные для заказа.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...