我正在使用 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
,因为我们可以在多行中使用相同的密钥。
答案 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)}