BytesWritable 存储问题

	public static void main(String args[]){
		BytesWritable cv = new BytesWritable();
		String str1 = "1234567";
		String str2 = "123450";
		cv.set(str1.getBytes(), 0, str1.getBytes().length);
		System.out.println(new String(cv.getBytes()));
		
		cv.set(str2.getBytes(), 0, str2.getBytes().length);
		System.out.println(new String(cv.getBytes()));
	}
output:
1234567
1234507
	public static void main(String args[]){
		BytesWritable cv = new BytesWritable();
		String str1 = "1234567";
		String str2 = "123450";
		cv.set(str1.getBytes(), 0, str1.getBytes().length);
		System.out.println(new String(cv.getBytes()));
		
		cv.setCapacity(0);
		
		cv.set(str2.getBytes(), 0, str2.getBytes().length);
		System.out.println(new String(cv.getBytes()));
	}
output:
1234567
123450


 
  

转载于:https://www.cnblogs.com/yxwkf/p/5085273.html

这个问题需要编写一些 Java 代码来实现。首先需要在 pom.xml 文件中添加 Hadoop 依赖: ```xml <dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-mapreduce-client-core</artifactId> <version>2.9.2</version> </dependency> </dependencies> ``` 然后开始编写代码: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.BytesWritable; import org.apache.hadoop.io.NullWritable; import org.apache.hadoop.io.SequenceFile; import org.apache.hadoop.io.Text; import org.apache.hadoop.io.compress.SnappyCodec; import org.apache.hadoop.util.ReflectionUtils; import java.io.File; import java.io.IOException; public class SequenceFileDemo { public static void main(String[] args) throws IOException { // 创建 Configuration 对象 Configuration conf = new Configuration(); // 创建 SequenceFile.Writer 对象 FileSystem fs = FileSystem.get(conf); Path outputPath = new Path("/tmp/output.seq"); SequenceFile.Writer writer = SequenceFile.createWriter(fs, conf, outputPath, Text.class, BytesWritable.class, SequenceFile.CompressionType.BLOCK, new SnappyCodec()); // 遍历文件夹中的所有文件,并将每个文件的内容写入 SequenceFile File dir = new File("/tmp/input"); for (File file : dir.listFiles()) { Text key = new Text(file.getName()); byte[] value = org.apache.commons.io.FileUtils.readFileToByteArray(file); BytesWritable bwValue = new BytesWritable(value); writer.append(key, bwValue); } writer.close(); // 创建 SequenceFile.Reader 对象 SequenceFile.Reader reader = new SequenceFile.Reader(fs, outputPath, conf); // 读取 SequenceFile 中的内容并输出 Text key = (Text) ReflectionUtils.newInstance(reader.getKeyClass(), conf); BytesWritable value = (BytesWritable) ReflectionUtils.newInstance(reader.getValueClass(), conf); while (reader.next(key, value)) { org.apache.commons.io.FileUtils.writeByteArrayToFile(new File("/tmp/output/" + key.toString()), value.getBytes()); } reader.close(); } } ``` 这段代码将遍历指定的文件夹,将每个文件的内容写入到一个 SequenceFile 中。然后,它将使用相同的 SequenceFile 读取器从文件中读取每个键值对,并将其写入一个新文件夹中。 请注意,我们在创建 SequenceFile.Writer 对象时指定了 SnappyCodec 压缩格式,以提高性能和节省存储空间。此外,我们还使用了 Apache Commons IO 库来将文件内容读入字节数组中。 最后,您需要将此代码打包并在 Hadoop 集群上运行。在运行之前,请确保在 Hadoop 配置文件中正确配置了文件系统和压缩库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值