Jak*_*ele 6 hadoop mapreduce elastic-map-reduce hadoop-streaming
我的地图功能产生了一个
Key\tValue
值= List(value1,value2,value3)
然后我的reduce函数产生:
Key\tCSV-Line
防爆.
2323232-2322 fdsfs,sdfs,dfsfs,0,0,0,2,fsda,3,23,3,s,
2323555-22222 dfasd,sdfas,adfs,0,0,2,0,fasafa,2,23,s
防爆.RawData:
232342|@3423@|34343|sfasdfasdF|433443|Sfasfdas|324343x 1000
无论如何,我想在开头消除密钥,所以我的客户端可以直接导入到mysql中.我有大约50个数据文件,我的问题是它映射一次后,reducer启动它是否需要打印出值的键或者我可以打印该值吗?
更多信息:
在这里,这段代码可能会更好地阐明情况
这有点像我打算做的.
Tar*_*riq 13
如果您不想发出密钥,请NullWritable在代码中将其设置为.例如 :
public static class TokenCounterReducer extends
Reducer<Text, IntWritable, NullWritable, IntWritable> {
public void reduce(Text key, Iterable<IntWritable> values,
Context context) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable value : values) {
sum += value.get();
}
context.write(NullWritable.get(), new IntWritable(sum));
// context.write(key, new IntWritable(sum));
}
Run Code Online (Sandbox Code Playgroud)
如果这不是您需要的,请告诉我,我会相应地更新答案.
小智 2
您的减速器可以发出没有 \t 的行,或者,在您的情况下,只是您所说的值。不幸的是,hadoop 流会将其解释为具有空值的键,并自动在每行末尾附加一个分隔符(默认为 \t)。您可以更改此分隔符是什么,但是,当我使用它时,我无法让它不附加分隔符。我不记得确切的细节,但基于此(Hadoop:键和值在输出文件中以制表符分隔。如何用分号分隔?)我认为该属性是mapred.textoutputformat.separator。我的解决方案是在拉回文件时去掉每行末尾的 \t :
hadoop fs -cat hadoopfile | perl -pe 's/\t$//' > destfile
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5545 次 |
| 最近记录: |