使用Scala Apache Spark解决顺序问题

时间:2019-10-10 13:06:20

标签: scala apache-spark parallel-processing

在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 个答案:

答案 0 :(得分:1)

这只是部分解决方案,但是我认为,如果分区正确,则可以使用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
  }
}