如何在Hadoop-.20 api中指定KeyValueTextInputFormat分隔符?
在新的API(apache.hadoop.mapreduce.KeyValueTextInputFormat)中,如何指定除tab之外的分隔符(分隔符)(默认值)以分隔键和值。
样本输入:
one,first line two,second line
输出要求:
Key : one Value : first line Key : two Value : second line
我将KeyValueTextInputFormat指定为:
Job job = new Job(conf, "Sample"); job.setInputFormatClass(KeyValueTextInputFormat.class); KeyValueTextInputFormat.addInputPath(job, new Path("/home/input.txt"));
这适用于tab作为分隔符。
在较新的API中,您应该使用mapreduce.input.keyvaluelinerecordreader.key.value.separator
配置属性。
这是一个例子:
Configuration conf = new Configuration(); conf.set("mapreduce.input.keyvaluelinerecordreader.key.value.separator", ","); Job job = new Job(conf); job.setInputFormatClass(KeyValueTextInputFormat.class); // next job set-up
请在驱动程序代码中设置以下内容。
conf.set("key.value.separator.in.input.line", ",");
对于KeyValueTextInputFormat ,输入行应该是由“\ t”分隔的键值对
Key1 Value1,Value2
通过更改默认分隔符,您可以根据需要进行阅读。
对于新的Api
这是解决方案
//New API Configuration conf = new Configuration(); conf.set("key.value.separator.in.input.line", ","); Job job = new Job(conf); job.setInputFormatClass(KeyValueTextInputFormat.class);
地图
public class Map extends Mapper { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(Text key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); System.out.println("key---> "+key); System.out.println("value---> "+value.toString()); . .
产量
key---> one value---> first line key---> two value---> second line
这是序列问题。
第一行conf.set("key.value.separator.in.input.line", ",")
必须在创建Job
类的实例之前。 所以:
conf.set("key.value.separator.in.input.line", ","); Job job = new Job(conf);
首先,新的API没有在0.20。*中完成。所以如果你想在0.20。*中使用新的API,你应该自己实现这个function。例如,你可以使用FileInputFormat来实现。 忽略LongWritable键,并自己在逗号上拆分Text值。
默认情况下, KeyValueTextInputFormat
类使用tab作为输入文本文件中键和值的分隔符。
如果要从自定义分隔符读取输入,则必须使用正在使用的属性设置配置。
对于新的Hadoop API,它是不同的:
conf.set("mapreduce.input.keyvaluelinerecordreader.key.value.separator", ";");
- 线程“main”中的exceptionjava.lang.NoClassDefFoundError:org / apache / hadoop / hbase / HBaseConfiguration
- hadoop mapreduce:java.lang.UnsatisfiedLinkError:org.apache.hadoop.util.NativeCodeLoader.buildSupportsSnappy()Z
- “hadoop namenode -format”返回java.net.UnknownHostException
- 在Spark中提取hive表分区 – java
- 当由不同用户提交时,Tez作业失败
- 多节点hadoop集群中的Apache Spark Sql问题
- 由于任务尝试无法报告状态600秒,因此减少失败。 杀! 解?
- Hadoop Hive无法将源移动到目标
- 从Spark中的压缩中读取整个文本文件