Решение последовательной проблемы с Scala Apache Spark - PullRequest
0 голосов
/ 10 октября 2019

В Scala Spark, учитывая отсортированный набор данных S и B, выберите пары S и B с минимальным ранжированием, обеспечивая уникальные значения для каждого S и каждого B.

Пример ввода:

|Rank|S  |B  |
|----|---|---|
|   1|S1 |B1 |
|   2|S2 |B1 |
|   3|S3 |B1 |
|   4|S1 |B2 |
|   5|S3 |B1 |
|   6|S2 |B2 |

Пример вывода:

|Rank|S  |B  |
|----|---|---|
|   1|S1 |B1 |
|   6|S2 |B2 |

Я понимаю, как это можно решить последовательно, однако возможно ли это решить с помощью Spark? Если да, то как?

1 Ответ

1 голос
/ 21 октября 2019

Это только частичное решение, но я думаю, что если ваши разделы сделаны правильно, вы можете использовать mapPartitions, чтобы выполнить работу для каждого раздела. Примерно так:

val rdd: RDD[(Int, String, String)] = ...
rdd.mapPartitions { it =>
  it.foldLeft(List.empty[(Int, String, String)]) {
    case (Nil, e) => List(e)
    case ((i, ci1, ci2) :: tail, (j, cj1, cj2)) =>
      if (ci1 == cj1 || ci2 == cj2)
        (i, ci1, ci2) :: tail
      else
        (j, cj1, cj2) :: (i, ci1, ci2) :: tail
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...