一、mapToPair

案例:
在项目中创建src同级目录in,并在此目录中创建sample.txt文件
sample.txt文件内容如下:

aa bb cc aa aa aa dd dd ee ee ee ee
ff aa bb zks
ee kks
ee zz zks

scala版本

scala是没有mapToPair函数的,scala版本只需要map就可以了

val conf = new SparkConf().setMaster("local[*]").setAppName("mapToPair")
val sc = new SparkContext(conf)

//将每一行的第一个单词作为键,1 作为value创建pairRDD
val lines = sc.textFile("in/sample.txt")
val pairs = lines.map(x=>(x.split(" ")(0),1))
pairs.collect.foreach(println)

在这里插入图片描述

Java版本

JavaRDD<String> lines = sc.textFile("in/sample.txt");

//  mapToPair
JavaPairRDD<String, Integer> mapToPairRdd = lines.mapToPair(new PairFunction<String, String, Integer>() {
    @Override
    public Tuple2<String, Integer> call(String s) throws Exception {
        String[] split = s.split(" ");
        String key = split[0];
        return new Tuple2<>(key, 1);
    }
});
List<Tuple2<String, Integer>> collect = mapToPairRdd.collect();
for (Tuple2 tup2:
        collect) {
    System.out.println(tup2);
}

在这里插入图片描述

二、flatMapToPair

类似于xxx连接 mapToPair是一对一,一个元素返回一个元素,而flatMapToPair可以一个元素返回多个,相当于先flatMap,在mapToPair

scala版本

//flatMapToPair
//将每一个单词都分成键,1 作为value
val pairRdd = sc.textFile("in/sample.txt").flatMap(x=>x.split(" ")).map((_,1))
pairRdd.collect.foreach(println)
//等同于: pairRdd collect() foreach println

在这里插入图片描述

Java版本

//  flatMapToPair
JavaPairRDD<String, Integer> flatMapToPairRdd = lines.flatMapToPair(new PairFlatMapFunction<String, String, Integer>() {
    @Override
    public Iterator<Tuple2<String, Integer>> call(String s) throws Exception {
        List<Tuple2<String, Integer>> list = new ArrayList<>();
        String[] split = s.split(" ");
        for (int i = 0; i < split.length; i++) {
            String key = split[i];
            Tuple2<String, Integer> tup2 = new Tuple2<>(key, 1);
            list.add(tup2);
        }
        return list.iterator();
    }
});
List<Tuple2<String, Integer>> collect = flatMapToPairRdd.collect();
for (Tuple2<String,Integer> tup2:
     collect) {
    System.out.println("key:"+tup2._1+" value:"+tup2._2);
}

在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐