关于SequenceFile.Writer.createWriter()被抛弃的重载方法和替代方法

         今天在学习Hadoop的I/O操作时,对于基于文件的数据结构SequenceFile这个类的使用时遇到了一个问题,我是基于Hadoop-2.8.5。其中在调用SequenceFile的createWriter(FileSystem fs,Configuration conf,Path path,Writable key,Writable value)方法和SequenceFile.Reader(FileSystem fs,Path path,Configuration conf)构造器时,编译器对其划线并显示is deprecated标识,这表示此方法或构造器已经被抛弃,并可能在以后的新API中删除掉。

 

并给出了新的建议采用

createWriter(Configuration conf,Option...option);
new Read(Configuration conf,Option...option);

参看下官方API文档,废除了很多的createWriter和Reader重载的方法和构造函数,Option这个参数更为抽象,它封装了原来的参数,这样会更加灵活。下面截选了一部分源码:(从中可以看到,Option封装了废除的方法中的参数,这样调用方法更加灵活且耦合度更低。)

    public static Option blockSize(long value) {
      return new BlockSizeOption(value);
    }
    
    public static Option progressable(Progressable value) {
      return new ProgressableOption(value);
    }

    public static Option keyClass(Class<?> value) {
      return new KeyClassOption(value);
    }
    
    public static Option valueClass(Class<?> value) {
      return new ValueClassOption(value);
    }
    
    public static Option metadata(Metadata value) {
      return new MetadataOption(value);
    }

    public static Option compression(CompressionType value) {
      return new CompressionOption(value);
    }

    public static Option compression(CompressionType value,
        CompressionCodec codec) {
      return new CompressionOption(value, codec);
    }

那么之前敲入的代码需要变更为如下:

        String uri = args[0];
		Configuration conf = new Configuration();
		FileSystem fs = FileSystem.get(URI.create(uri), conf);
		Path path = new Path(uri);
		IntWritable key = new IntWritable();
		Text value = new Text();
		SequenceFile.Writer writer = null;
		try {
		  //writer=SequenceFile.createWriter(fs, conf, path, key.getClass(),value.getClass());//被弃用的方法
			SequenceFile.Writer.Option optionfile=Writer.file(path);
			SequenceFile.Writer.Option optionkey=Writer.keyClass(key.getClass());
			SequenceFile.Writer.Option optionvalue=Writer.valueClass(value.getClass());
			writer=SequenceFile.createWriter(conf, optionfile,optionkey,optionvalue);
String uri = args[0];
		Configuration conf = new Configuration();
		FileSystem fs = FileSystem.get(URI.create(uri), conf);
		Path path = new Path(uri);
		SequenceFile.Reader reader = null;
		try {
//			reader = new SequenceFile.Reader(fs, path, conf);//被弃用的构造器
			SequenceFile.Reader.Option optionfile=Reader.file(path);
			reader=new SequenceFile.Reader(conf, optionfile);

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值