RDD

时间:2016-06-08 14:23:41

标签: apache-spark rdd

我在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)),例如重复元组的键,为什么会发生这种情况?我不想重复密钥。

1 个答案:

答案 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勇气:)