карта уменьшить проблему, вычисление значений - PullRequest
0 голосов
/ 13 марта 2019

Я новичок в плане сокращения парадигмы и пытаюсь найти лучшее решение для приведенной ниже проблемы.

У меня есть следующий набор строк, состоящий из обзоров приложений Google Play Store, столбцы: AppName, Категория, Тип, рейтинг, пример строки может быть [Zomato, Food, Free, 4.2], [Swiggy, Food, Платные, 3,2] и т. Д. Вопрос: найдите соотношение между средними платными и бесплатными рейтингами для каждой категории?Как я могу решить эту проблему, используя карту уменьшить парадигму / искру

это как на стороне карты выбросить ключ и составное значение как (Food, (Free, 4.2)), (Food, (Paid, 3.2)), а затем сделатьсреднее вычисление в сторону уменьшения со списком (значениями)?Есть ли способ лучше?

1 Ответ

0 голосов
/ 13 марта 2019

В искре это было бы очень просто. Логика сокращения карты была бы полностью скрыта от вас.

// let's define some data
val df = Seq((0, "cat_a", "free", 2.5), (1, "cat_a", "free", 3.5), (2, "cat_a", "paid", 4.1),
             (3, "cat_a", "paid", 4.5), (4, "cat_b", "free", 2.5), (5, "cat_b", "paid", 4.8))
    .toDF("app", "cat", "type", "rating")

df.show
+---+-----+----+------+
|app|  cat|type|rating|
+---+-----+----+------+
|  0|cat_a|free|   2.5|
|  1|cat_a|free|   3.5|
|  2|cat_a|paid|   4.1|
|  3|cat_a|paid|   4.5|
|  4|cat_b|free|   2.5|
|  5|cat_b|paid|   4.8|
+---+-----+----+------+

Тогда это так просто:

val result = df.groupBy("cat").pivot("type")
    .agg(avg('rating))
    .withColumn("ratio", 'free / 'paid)

result.show
+-----+----+----+------------------+
|  cat|free|paid|             ratio|
+-----+----+----+------------------+
|cat_b| 2.5| 4.8|0.5208333333333334|
|cat_a| 3.0| 4.3|0.6976744186046512|
+-----+----+----+------------------+

Примечание: если вы знаете, что этот тип может быть платным или бесплатным, вы можете использовать .pivot("type", Seq("paid", "free"), что будет более эффективным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...