Java 将CSV转换为ORC时出现异常

Java 将CSV转换为ORC时出现异常,java,hadoop,mapreduce,orc,bigdata,Java,Hadoop,Mapreduce,Orc,Bigdata,我正在尝试编写一个mapreduce程序,该程序将输入作为CSV,并以ORC格式写入,但面临NullPointerException异常 下面是我得到的异常堆栈跟踪 java.lang.Exception: java.lang.NullPointerException at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:406) Caused by: java.lang.NullPointerExc

我正在尝试编写一个mapreduce程序,该程序将输入作为CSV,并以ORC格式写入,但面临NullPointerException异常

下面是我得到的异常堆栈跟踪

java.lang.Exception: java.lang.NullPointerException
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:406)
Caused by: java.lang.NullPointerException
    at org.apache.hadoop.hive.ql.io.orc.WriterImpl.createTreeWriter(WriterImpl.java:1584)

at org.apache.hadoop.hive.ql.io.orc.WriterImpl.<init>(WriterImpl.java:176)
at org.apache.hadoop.hive.ql.io.orc.OrcFile.createWriter(OrcFile.java:369)
at org.apache.hadoop.hive.ql.io.orc.OrcNewOutputFormat$OrcRecordWriter.write(OrcNewOutputFormat.java:51)
at org.apache.hadoop.hive.ql.io.orc.OrcNewOutputFormat$OrcRecordWriter.write(OrcNewOutputFormat.java:37)
at org.apache.hadoop.mapred.MapTask$NewDirectOutputCollector.write(MapTask.java:558)
at org.apache.hadoop.mapreduce.task.TaskInputOutputContextImpl.write(TaskInputOutputContextImpl.java:85)
at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.write(WrappedMapper.java:106)
at ORCMapper.map(ORCMapper.java:22)
at ORCMapper.map(ORCMapper.java:1)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:140)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:672)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:330)
at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:268)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
/**映射程序代码**/

    public class ORCMapper extends Mapper<LongWritable,Text,NullWritable,Writable> {

        private final OrcSerde serde = new OrcSerde();

        @Override
        protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

             Writable row = serde.serialize(value, null);
                   context.write(NullWritable.get(), row);
                }
        //}
    }
public类ORCMapper扩展映射器{
专用最终OrcSerde serde=新OrcSerde();
@凌驾
受保护的void映射(LongWritable键、文本值、上下文)引发IOException、InterruptedException{
可写行=serde.serialize(值,null);
write(NullWritable.get(),行);
}
//}
}

如果使用空的第二个参数调用OrcSerde.serialize方法,我打赌这就是原因。请看下面的例子:

嘿,谢谢。。它工作了,但是我想知道为什么我需要发送第二个参数。
    public class ORCMapper extends Mapper<LongWritable,Text,NullWritable,Writable> {

        private final OrcSerde serde = new OrcSerde();

        @Override
        protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

             Writable row = serde.serialize(value, null);
                   context.write(NullWritable.get(), row);
                }
        //}
    }