У меня есть фрейм данных в Spark 2, как показано ниже, где у пользователей от 50 до тысяч сообщений. Я хотел бы создать новый фрейм данных, в котором будут все пользователи в исходном фрейме данных, но только с 5 случайно выбранными сообщениями для каждого пользователя.
+--------+--------------+--------------------+
| user_id| post_id| text|
+--------+--------------+--------------------+
|67778705|44783131591473|some text...........|
|67778705|44783134580755|some text...........|
|67778705|44783136367108|some text...........|
|67778705|44783136970669|some text...........|
|67778705|44783138143396|some text...........|
|67778705|44783155162624|some text...........|
|67778705|44783688650554|some text...........|
|68950272|88655645825660|some text...........|
|68950272|88651393135293|some text...........|
|68950272|88652615409812|some text...........|
|68950272|88655744880460|some text...........|
|68950272|88658059871568|some text...........|
|68950272|88656994832475|some text...........|
+--------+--------------+--------------------+
Что-то вроде posts.groupby('user_id').agg(sample('post_id'))
но в pyspark такой функции нет.
Любой совет?
Обновление:
Этот вопрос отличается от другого тесно связанного с ним вопроса stratified-sampling-in-spark двумя способами:
- Он спрашивает о непропорциональной стратифицированной выборке, а не об общем пропорциональном методе в другом вопросе выше.
- Он спрашивает об этом в Spark Dataframe API, а не в RDD.
Я также обновил заголовок вопроса, чтобы прояснить это.