java - 如何在 Hadoop SequenceFile 中找到值?
问题描述
我已经将一些二进制图像数据写入 Hadoop 序列文件,并希望在 Hadoop 之外将其写为 PNG,如果可能的话,使用 Java。
[已编辑] 数据流概述:输入文件 → 从输入生成 BufferedImages → 将 BufferedImages 转换为二进制数组 → 在 HDFS 中存储为 SequenceFile → 尝试将 SequenceFile 移出 HDFS 并将其转换为 PNG。
但是,我不确定如何定位数据在 SequenceFile 中的起始位置。从我看到的SequenceFile文档来看,我可以使用同步标记来定位 SequenceFile 标头的结尾,然后使用记录长度和键长度信息来查找值的开头。
但是,我不确定如何找到同步标记的位置。我如何找到标头的元数据停止的位置以及同步标记的开始和结束位置?我可以计算同步标记的值并以这种方式查找吗?另外,如何找出记录长度和密钥长度占用的字节数?
如果有其他方法可以找到 SequenceFile 值,请告诉我。如果有帮助,这里有一些我用来写入 SequenceFile 的代码。
baos = new ByteArrayOutputStream();
ImageIO.write(img, "png", baos); //img is a BufferedImage
byte[] imBytes = baos.toByteArray();
baos.write(imBytes);
writer = SequenceFile.createWriter(conf, writer.file(new Path(imgPath)), writer.keyClass(Text.class),writer.valueClass(BytesWritable.class));
writer.append(new Text(imgPath), new BytesWritable(imBytes));
本质上,我获取了程序生成的 BufferedImage,将其作为 PNG 写入字节数组,然后将其写入 SequenceFile。
[编辑] 我查看了SequenceFile 源代码,有一个函数叫做getSync()
? 我认为它是私人的,所以我不确定我会如何使用它。
解决方案
推荐阅读
- c# - 如何将现有类转换为带有事件的 DDD 聚合?
- c# - 查找与 PID 对应的 HWND
- javascript - ReactJS - TypeError:无法读取未定义的属性'setState' - LocalForage IndexedDB GraphQL
- mysql - 在mysql中的某个时间后获取下一个可用时间段
- django - 如何在 django 中使用过滤后的自联接注释 QuerySet
- google-apps-script - 如何在当天下午 12:00 通过 IMPORTHTML 锁定单元格以防止更新
- c++ - 是否有一个 c++ 函数来编辑具有 ax 和 y 值的特定控制台字符
- wordpress - 在突出主题中 WP 更新到 5.0.2 后使用 Classic Visual Composer 代码
- python - Python 函数不在命令行上运行
- javascript - 如何在网页上找到合适的位置进行点击?