JavaPairRDD方法中几种存储方式的坑

1,ERROR Utils: Aborting task   java.io.IOException: key out of order: For after packagejava

    先上代码apache

public static void main(String[] args) throws ClassNotFoundException {
		SparkConf sparkConf = new SparkConf().setAppName("SparkTest-MapFile").setMaster("local");
		sparkConf.registerKryoClasses(new Class<?>[] { Class.forName("org.apache.hadoop.io.IntWritable"),
				Class.forName("org.apache.hadoop.io.Text") });

		JavaSparkContext ctx = new JavaSparkContext(sparkConf);
		JavaRDD<String> jpr = ctx.textFile("/README.md");
		jpr.foreach(v -> {
			System.out.println(v);
		});
		JavaRDD<String> words = jpr.flatMap(line -> Arrays.asList(line.split(" ")).iterator());
		JavaPairRDD<String, Integer> counts = words.mapToPair(w -> new Tuple2<String, Integer>(w, 1))
				.reduceByKey((x, y) -> x + y);
		counts.mapToPair(v -> new Tuple2<Text, IntWritable>(new Text(v._1()), new IntWritable(v._2())))
				.saveAsNewAPIHadoopFile("/tmp/test6", Text.class, IntWritable.class, MapFileOutputFormat.class);
	}

按理说这样的写法是没有问题的,可是就是一直报错,不明缘由,各类找也没有找到相应的解决办法,也没有找到有人跟我同样出现问题,而后本身就开始各类无头苍蝇乱找,后面MapFileOutputFormat改成了SequenceFileOutputFormat的方式保存就没问题,这就让纠结了,后面无心间看到 hadoop的Map存储方式有有序的,就想到是否是存储前要本身手动排序下,修改代码加入排序.sortByKey(),而后在进行运行,完美运行成功。oop

public static void main(String[] args) throws ClassNotFoundException {
		SparkConf sparkConf = new SparkConf().setAppName("SparkTest-MapFile").setMaster("local");
		sparkConf.registerKryoClasses(new Class<?>[] { Class.forName("org.apache.hadoop.io.IntWritable"),
				Class.forName("org.apache.hadoop.io.Text") });

		JavaSparkContext ctx = new JavaSparkContext(sparkConf);
		JavaRDD<String> jpr = ctx.textFile("/README.md");
		jpr.foreach(v -> {
			System.out.println(v);
		});
		JavaRDD<String> words = jpr.flatMap(line -> Arrays.asList(line.split(" ")).iterator());
		JavaPairRDD<String, Integer> counts = words.mapToPair(w -> new Tuple2<String, Integer>(w, 1))
				.reduceByKey((x, y) -> x + y);
		counts.mapToPair(v -> new Tuple2<Text, IntWritable>(new Text(v._1()), new IntWritable(v._2())))
				.sortByKey().saveAsNewAPIHadoopFile("/tmp/test6", Text.class, IntWritable.class, MapFileOutputFormat.class);
	}

猜想可能JavaPairRDD对map方式的存储须要本身排序的,真正是否是这样的缘由就不知道了,但愿哪位大神知道的话能够告知下spa

相关文章
相关标签/搜索