一、mapToPair
将每一行的第一个单词作为键,1 作为value创建pairRDD
scala版本
scala没有mapToPair,使用map就能完成
val conf=new SparkConf().setMaster("local[2]").setAppName("maptopair")
val sc=new SparkContext(conf)
val lines=sc.textFile("D:/text/sample.txt")
val pairs = lines.map(x=>(x.split(" ")(0),1))
pairs.collect.foreach(println)
java版本
SparkConf conf=new SparkConf().setMaster("local[2]").setAppName("mapToPairJava");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD<String> lines=sc.textFile("D:/text/sample.txt");
JavaPairRDD<String,Integer> pairRdd=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=pairRdd.collect();
for(Tuple2 t:collect){
System.out.print(t)
}
二、flatMapToPair
mapToPair是一对一,一个元素返回一个元素,而flatMapToPair可以一个元素返回多个,相当于先flatMap,在mapToPair
scala版本
val pairRdd=sc.textFile("D:/text/sample.txt")
.faltMap(_.split(" ")).map(_,1)
pairRdd.collect.foreach(println)
java版本
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> tuple = new Tuple2<>(key, 1);
list.add(tuple);
}
return list.iterator();
}
});
List<Tuple2<String,Integer>> collect=flatMapToPairRDD.collect();
for (Tuple2 t : collect) {
System.out.println(t);
}