合并两个javapairdd

合并两个javapairdd,java,apache-spark,rdd,Java,Apache Spark,Rdd,我在java中与Spark合作。我有一个名为Out1的JavaPairRDD Out1: IDCLIENT|INFO| 1|A| 1|C| 1|H| 5|R| 2|B| IDCLIENT2|INFO| 1|C| 1|H| 5|R| 2|B| IDCLIENT|INFO|IDCLIENT2| 1|A,C|1| 1|C,H|1| 1|H,R|5| 5|R,B|2| 2|B| | 我想创建一个名为

我在java中与Spark合作。我有一个名为Out1的JavaPairRDD

Out1:

IDCLIENT|INFO|    
1|A|    
1|C|    
1|H|    
5|R|    
2|B|
IDCLIENT2|INFO|    
1|C|    
1|H|    
5|R|    
2|B|
IDCLIENT|INFO|IDCLIENT2|
1|A,C|1|   
1|C,H|1|   
1|H,R|5|    
5|R,B|2|    
2|B| |
我想创建一个名为Out2的新JavaPairdd,它与Out1相同,没有第一行:

Out2:

IDCLIENT|INFO|    
1|A|    
1|C|    
1|H|    
5|R|    
2|B|
IDCLIENT2|INFO|    
1|C|    
1|H|    
5|R|    
2|B|
IDCLIENT|INFO|IDCLIENT2|
1|A,C|1|   
1|C,H|1|   
1|H,R|5|    
5|R,B|2|    
2|B| |
之后,我想将这两个javapairdd组合如下:

Out3:

IDCLIENT|INFO|    
1|A|    
1|C|    
1|H|    
5|R|    
2|B|
IDCLIENT2|INFO|    
1|C|    
1|H|    
5|R|    
2|B|
IDCLIENT|INFO|IDCLIENT2|
1|A,C|1|   
1|C,H|1|   
1|H,R|5|    
5|R,B|2|    
2|B| |

注意:我们不能使用
groupByKey
,因为我们可以在多行中使用相同的键。

RDD中没有“drop”操作,因此删除一行比预期的要困难一些

我会使用
zipWithIndex
并通过索引加入。它有点重,但可以完成任务:

val indexed1 = out1.zipWithIndex
val indexed2 = indexed1.map{(k,v) => ((k-1),v)}
val joined = indexed1 join indexed2
val out3 = joined.map{case (k,(v1,v2)) => format(v1,v2)}
// where format gets the values in the desired output layout
如果数据集适合内存,我只需要做一个简单的Scala“oneliner”:

out1.zip(out1.drop(1)).map{case (o1, o2) => format(o1,o2)}

这个数据集有多大?你能用普通的Scala做吗?比如:
out1.zip(out1.drop1).map{case(o1,o2)=>combine(o1,o2)}