我在java中使用spark,我有一个包含以下元素的.csv文件:
Id,Name,Color,Age
1,Titi,Jaune,5
2,Médor,Noir,10
3,Pitié,Noir,5
当我创建pairRDD时,我想剥去标题,使其看起来像:
(1,Titi,Jaune,5)
(2,Médor,Noir,10)
(3,Pitié,Noir,5)
我不想使用filter()函数,因为它会处理所有行,这是低效的。
在计算之后,我想再次将我的配对RDD保存为文本文件,在这种情况下想要将标题返回到文件顶部。我怎么能这样做?
当我使用以下代码从javaRDD
创建pairRDD时,还有一件事public Tuple2<Integer, String> call(String x) {
return new Tuple2(x.split(",")[0], x);
}
java RDD中的元组如下所示:
将(1,Titi,Jaune,5)
转换为pairRDD后,它看起来像((1),(1,Titi,Jaune,5))
,例如重复元组的键,为什么会发生这种情况?我不想重复密钥。
答案 0 :(得分:0)
跳过标题:
您可以使用subtract
方法删除rdd:
String headerSTR = "Id,Name,Color,Age";
JavaRDD<String> header = jsc.parallelize(Arrays.asList(headerSTR));
yourRDD = yourRDD.subtract(header);
要避免元组中的重复键:
您可以轻松地从x中减去id:
public Tuple2<Integer, String> call(String x) {
String strs = x.split(",");
return new Tuple2(strs[0], x.replaceFirst(strs[0]+",", ""));
}
它会给你类似的东西:((1),(Titi,Jaune,5))
这就是你要找的吗?
Bon勇气:)