Следующее я пытаюсь сделать в Scala-Spark.
Я надеюсь, что кто-то может дать мне совет о том, как решить эту проблему, или предоставит мне ресурсы, чтобы выяснить, что я могу сделать.
У меня есть dateCountDF
со счетом, соответствующим дате. Я хотел бы случайным образом выбрать определенное количество записей для каждого dateCountDF.month
из другого фрейма данных entitiesDF
, где dateCountDF.FirstDate<entitiesDF.Date && entitiesDF.Date <= dateCountDF.LastDate
, а затем поместить все результаты в новый фрейм данных. См. ниже пример данных
Я совершенно не уверен, как подойти к этой проблеме с точки зрения Spark-SQl или Spark-MapReduce. Самым дальним, что я получил, был наивный подход, когда я использую foreach
в фрейме данных, а затем обращаюсь к другому фрейму данных внутри функции. Но это не работает из-за распределенной природы Spark.
val randomEntites = dateCountDF.foreach(x => {
val count:Int = x(1).toString().toInt
val result = entitiesDF.take(count)
return result
})
DataFrames
**dateCountDF**
| Date | Count |
+----------+----------------+
|2016-08-31| 4|
|2015-12-31| 1|
|2016-09-30| 5|
|2016-04-30| 5|
|2015-11-30| 3|
|2016-05-31| 7|
|2016-11-30| 2|
|2016-07-31| 5|
|2016-12-31| 9|
|2014-06-30| 4|
+----------+----------------+
only showing top 10 rows
**entitiesDF**
| ID | FirstDate | LastDate |
+----------+-----------------+----------+
| 296| 2014-09-01|2015-07-31|
| 125| 2015-10-01|2016-12-31|
| 124| 2014-08-01|2015-03-31|
| 447| 2017-02-01|2017-01-01|
| 307| 2015-01-01|2015-04-30|
| 574| 2016-01-01|2017-01-31|
| 613| 2016-04-01|2017-02-01|
| 169| 2009-08-23|2016-11-30|
| 205| 2017-02-01|2017-02-01|
| 433| 2015-03-01|2015-10-31|
+----------+-----------------+----------+
only showing top 10 rows
Изменить: для пояснения. Мои входы entitiesDF
и dateCountDF
. Я хочу перебрать dateCountDF
и для каждой строки выбрать случайное количество сущностей в entitiesDF
, где dateCountDF.FirstDate<entitiesDF.Date && entitiesDF.Date <= dateCountDF.LastDate