Что я хочу сделать так: http://cn.mathworks.com/help/matlab/ref/median.html?requestedDomain=www.mathworks.com Найти медианное значение каждого столбца. Это можно сделать, собирая RDD для драйвера, для больших данных, которые станут невозможными. Я знаю, что Statistics.colStats() может вычислять среднее значение, дисперсия ... но медиана не включена. Кроме того, вектор является многомерным и разреженным.Как рассчитать медианную по RDD [org.apache.spark.mllib.linalg.Vector] в Spark эффективно?
ответ
Ну я не понимаю, векторную часть, однако это мой подход (я держал пари, есть лучшие из них):
val a = sc.parallelize(Seq(1, 2, -1, 12, 3, 0, 3))
val n = a.count()/2
println(n) // outputs 3
val b = a.sortBy(x => x).zipWithIndex()
val median = b.filter(x => x._2 == n).collect()(0)._1 // this part doesn't look nice, I hope someone tells me how to improve it, maybe zero?
println(median) // outputs 2
b.collect().foreach(println) // (-1,0) (0,1) (1,2) (2,3) (3,4) (3,5) (12,6)
Хитрость заключается в том, чтобы отсортировать dataset
с помощью sortBy
, затем заархивировать записи с их индекс, используя zipWithIndex
, а затем получить средний вход, обратите внимание, что я установил нечетное количество выборок, для простоты, но сущность там, помимо этого, вы должны сделать это с каждым столбцом вашего набора данных.
«Трюк заключается в сортировке вашего набора данных с помощью sortBy», sloooow. Бывают более быстрые алгоритмы, но они все еще O (N). Кроме того, в примере OP у него есть до 400 записей в строке, что означает сортировку 400 раз –
@ TheArchetypalPaul Ну, я сказал в своем ответе: «Уверен, что есть лучшие», я надеюсь, что кто-то отправит их, чтобы я мог узнать :) –
- 1. Преобразование RDD [org.apache.spark.sql.Row] в RDD [org.apache.spark.mllib.linalg.Vector]
- 2. Как рассчитать медианную?
- 3. Spark RDD: как наиболее эффективно вычислять статистику?
- 4. Искра (scala) три разделенных rdd [org.apache.spark.mllib.linalg.Vector] до одного rdd [Vector]
- 5. Spark: Группа RDD по id
- 6. Как эффективно проходить RDD
- 7. Как эффективно удалить подмножество в искровом RDD
- 8. Как сгруппировать по многим клавишам в Spark RDD?
- 9. Как преобразовать матрицу в RDD [Vector] in spark
- 10. Удалить дубликаты по строке в Spark RDD
- 11. Невозможно преобразовать Spark RDD в схему RDD
- 12. spark schema rdd to RDD
- 13. Apache Solr запрос рассчитать медианную цену
- 14. вычислить медианную по нескольким векторам
- 15. Java Spark RDD в другом RDD?
- 16. Сомнения на RDD Spark
- 17. Процессы Spark streaming RDD по одному?
- 18. Распределение RDD в Spark Streaming
- 19. Как конвертировать RDD [Row] в RDD [Вектор]
- 20. Apache Spark RDD Workflow
- 21. Array [Byte] Spark RDD для String Spark RDD
- 22. Scala Spark sort RDD по индексу подстроки
- 23. Spark RDD Внешнее хранилище
- 24. Spark RDD - как они работают
- 25. Spark: Как «сканировать» коллекции RDD?
- 26. Как добавить еще RDD в существующую RDD в Spark?
- 27. Apache Spark Rdd persist
- 28. Spark RDD data selection
- 29. Spark: Манипулирование несколькими RDD
- 30. Spark RDD apend
Я собираю RDD для драйвера, а затем вычисляю его. – guxiang
@guxiang Этот подход хлопотно, потому что некоторые наборы данных не подходят только одному компьютеру –
@guxiang какой вектор? не могли бы вы показать нам? –