如何使用sequencefileinputformat将字节数组序列化为本地文件

euoag5mw  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(488)

我想这样做:protobuf->字节数组->http post |->字节数组->序列化到本地文件->hadoop中的mapreduce。
我要做的第一种方法是使用bufferedwriter/filewriter将字节数组作为字符串写入带有'\n'或其他分隔符的本地文件。这种方法的问题是写入的字节数组可能包含'\n'或其他一些分隔符。
字节数组->protobuf->json,然后将json序列化为文件。它将遇到与上述相同的问题。
hadoop中有一个inputformat名为sequencefileinputformat,它似乎在hadoop的mapreduce中使用。我的问题是如何在本地将字节数组序列化为该格式的文件?
或者有什么不同的方法可以解决我的问题?谢谢您。

s5a0g9ez

s5a0g9ez1#

好了,现在问题解决了。
org.apache.hadoop.io.sequencefile.writer适合我。

Configuration conf = new Configuration();
LocalFileSystem fs = FileSystem.getLocal(conf);
SequenceFile.Writer writer = SequenceFile.createWriter(fs, conf, new Path("~/test"), LongWritable.class, BytesWritable.class);
LongWritable key = new LongWritable(1L);
BytesWritable val = new BytesWritable(protobufObject.toByteArray());
writer.append(key, val);
writer.close();

相关问题