使用Scala apache spark解决序列问题
在Scala Spark上,给定S和B的排序数据集,选择排序最低的S和B对,确保每个S和B的值唯一 样本输入:使用Scala apache spark解决序列问题,scala,apache-spark,parallel-processing,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 | 我理解如何按
|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解决它?如果是这样,怎么做?这只是部分解决方案,但我认为如果您的分区做得正确,您可以使用
mapPartitions
来完成每个分区的工作。如下所示:
val-rdd:rdd[(Int,String,String)]=。。。
rdd.mapPartitions{it=>
it.foldLeft(List.empty[(Int,String,String)]){
案例(无,e)=>列表(e)
案例((i,ci1,ci2)::tail,(j,cj1,cj2))=>
如果(ci1==cj1 | | ci2==cj2)
(i,ci1,ci2)::尾部
其他的
(j,cj1,cj2):(i,ci1,ci2)::尾
}
}
为什么输出中不存在“2 S1 B2”?“2不是那一对的最低等级吗?”LizardKing,因为S1只能出现一次,而组合S1 B1的等级较低。