У меня есть набор данных, который содержит данные о пользователе и покупке. Вот пример, где первый элемент - userId, второй - productId, а третий - логический.
(2147481832,23355149,1)
(2147481832,973010692,1)
(2147481832,2134870842,1)
(2147481832,541023347,1)
(2147481832,1682206630,1)
(2147481832,1138211459,1)
(2147481832,852202566,1)
(2147481832,201375938,1)
(2147481832,486538879,1)
(2147481832,919187908,1)
...
Я хочу убедиться, что я использую только 80% данных каждого пользователя и создаю RDD, а оставлю 20% и создаю еще один RDD. Позволяет направить поезд и проверить. Я хотел бы избегать использования groupBy для начала, поскольку он может создать проблему с памятью, поскольку набор данных является большим. Каков наилучший способ сделать это?
Я мог бы сделать следующее, но это не даст 80% каждого пользователя.
val percentData = data.map(x => ((math.random * 100).toInt, x._1. x._2, x._3)
val train = percentData.filter(x => x._1 < 80).values.repartition(10).cache()