结合两个JavaPairRDD

时间:2014-10-28 14:47:45

标签: java apache-spark rdd

我正在使用 java 中的 Spark 。我有一个名为 Out1

JavaPairRDD

输出1:

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

我想创建一个名为 Out2 的新 JavaPairRDD ,它与没有第一行的 Out1 相同:

Out2的:

IDCLIENT2|INFO|    
1|C|    
1|H|    
5|R|    
2|B|

之后,我想像这样结合这两个 JavaPairRDD

Out3的:

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

注意:我们无法使用groupByKey,因为我们可以在多行中使用相同的密钥。

1 个答案:

答案 0 :(得分:1)

没有'掉落'在RDD中操作,因此删除一条线比人们期望的要困难一些。

我使用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)}