- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试使用 SequenceFile 在两个 mapReduce 程序之间传递数据。我要传递的数据格式为 >。由于某种原因, map 中的某些条目似乎没有从一个程序传递到另一个程序。这是我的代码,首先是生成 de SequenceFileOutput 的 reducer,然后是从中读取的映射器。
公共(public)静态类 IntSumReducer 扩展 Reducer {
public void reduce(Text key, Iterable<Text> values,
Context context
) throws IOException, InterruptedException {
MapWritable vector = new MapWritable() ;
for (Text val : values){
if(vector.containsKey(val)){
vector.put(val , new IntWritable(((IntWritable)vector.get(val)).get() + 1));
}
else
vector.put(val , new IntWritable(1));
}
context.write(key, vector);
}
}
和映射器:
公共(public)静态类 TokenizerMapper 扩展映射器{
private final static int cota = 100;
private final static double ady = 0.25;
public void map(Text key, MapWritable value, Context context
) throws IOException, InterruptedException {
IntWritable tot = (IntWritable)value.get(key);
int total = tot.get();
if(total > cota){
MapWritable vector = new MapWritable() ;
Set<Writable> keys = value.keySet();
Iterator<Writable> iterator = keys.iterator();
while(iterator.hasNext()){
Text llave = (Text) iterator.next();
if(!llave.equals(key)){
IntWritable cant = (IntWritable) value.get(llave);
double rel = (((double)cant.get())/(double)total);
if(cant.get() > cota && rel > ady ){
vector.put(llave, new DoubleWritable(rel));
}
}
}
context.write(key,vector);
}
}
最佳答案
for (Text val : values){
if(vector.containsKey(val)){
vector.put(val , new IntWritable(((IntWritable)vector.get(val)).get() + 1));
}
else
vector.put(val , new IntWritable(1));
}
这就是你的问题 - hadoop 重用了 val Text 对象,所以在调用 vector.put 时你应该创建一个新的 Text 对象来脱离 val 引用(它的值将在 for 的下一次迭代中改变)循环)。
您可以修改您的逻辑以遵循它,它应该可以工作(我还更新了计数器增量逻辑以提高效率):
IntWritable tmpInt;
for (Text val : values){
tmpInt = (IntWritable) vector.get(val);
if(tmpInt == null) {
tmpInt = new IntWritable(0);
// create a copy of val Text object
vector.put(new Text(val), tmpInt);
}
// update the IntWritable wrapped int value
tmpInt.set(tmpInt.get() + 1);
// Note: you don't need to re-insert the IntWritable into the map
}
关于java - 如何将 MapWritable 与 SequenceFile 一起使用? Hadoop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10586141/
我试图运行 Norstadt 先生在以下链接下提供的矩阵乘法示例 http://www.norstad.org/matrix-multiply/index.html .我可以使用 hadoop 0.2
我有一个代表序列文件的通用输入流。我想从中创建一个SequenceFile.Reader或类似的类,而无需将输出流写入磁盘上的临时文件。是否有一些事情让我从输入流转到允许我从输入流中读取键/值对的东西
环境:Hadoop 0.20.2-cdh3u5 我正在尝试使用使用 SequenceFile.Writer 的自定义工具将日志数据 (10G) 上传到 HDFS。 SequenceFile.Write
我使用以下代码将一些数据写入 SequenceFile 格式文件。当程序运行一段时间时,我通过 Eclipse 控制台上的红色按钮中断程序。但是,当我检查 hdfs 上的数据文件时,序列文件的大小为零
我有一个Hadoop SequenceFile,其中的键是IntWritable,值是实现Writable的任意Java类,并带有有趣的toString()方法。我想制作一个两列Hive表,其中第一列
我正在考虑使用SequenceFile作为“小数据库”来存储小文件。我需要并发客户端可以在此SequenceFile中存储小文件并检索唯一的ID(记录的键)。 有可能吗?我是hadoop的新手,正在阅
我看了hadoop-1.0.4源码中的SequenceFile.java。我找到了 sync(long) 方法它用于在将 SequenceFile 拆分为 MapReduce 中的文件拆分时在 Seq
WebHDFS 真的不支持 SequenceFiles 吗? 我找不到任何说明它确实如此的东西。我遇到了常见的小文件问题,并且相信 SequenceFiles 可以正常工作,但我需要使用 WebHDF
我有一个 SequenceFile 格式的 HDFS 文件。键是 Text,值是自定义可序列化类(例如)MyCustomClass。我想通过 hadoop fs -text 命令读取此文件,但它失败了
我们正在选择存储原始日志的文件格式,主要要求是压缩和可拆分。 block 压缩(以编解码器为准)SequenceFiles和 Hadoop-LZO到目前为止看起来最合适。 哪一个被Map-Reduce
目前我使用以下代码附加到现有的 SequenceFile: // initialize sequence writer Writer writer = SequenceFile.createWrite
我正在学习Hadoop,这个问题困扰了我一段时间。基本上,我正在将一个 SequenceFile 写入磁盘,然后将其读回。但是,每次读取时都会得到一个EOFException。更深层次的观察发现,在写
我有一个来自客户的压缩 Hadoop 序列文件,我想检查一下。我目前没有完整的架构信息(我正在单独处理)。 但在此期间(并希望有一个通用解决方案),我有哪些检查文件的选项? 我找到了一个工具 forq
hadoop 以键值对(记录)格式写入 SequenceFile。考虑我们有一个大的无界日志文件。 Hadoop 会根据 block 大小拆分文件,并将它们保存在多个数据节点上。是否保证每个键值对都位
附加到 SequenceFiles 似乎很慢。我们将文件夹(其中包含小文件)转换为 SequenceFiles,使用文件名作为键,内容作为值。但是,吞吐量非常低,大约为 2MB/s(每秒大约 2 到
我在网上为此做了很多搜索,但我什么也没找到,尽管我觉得它一定有些常见。我过去曾使用 Mahout 的 seqdirectory 命令来转换包含文本文件的文件夹(每个文件都是一个单独的文档)。但在这种情
首先,考虑这个 CustomWriter 类: public final class CustomWriter { private final SequenceFile.Writer writer
我正在使用 Java API 将我拥有的一些自定义文件转换为 hadoop 序列文件。 我正在从本地文件读取字节数组并将它们作为索引(整数)- 数据(字节[])对附加到序列文件: InputStrea
有什么方法可以将序列文件转换为.txt 文件吗? sequencefile 是在 hadoop 作业之后生成的,当我尝试使用 SequenceFileReader 读取它时给我一个 EOFExcept
我有一个多阶段/作业 mapreduce 程序。我的第一个输入必须是 TextInputFormat,最后一个输出必须是 TextOutputFormat。我想要实现的是在第一个作业中将格式从 Tex
我是一名优秀的程序员,十分优秀!