【发布时间】:2018-07-27 17:48:53
【问题描述】:
假设我有一个 tsv 或 csv 文件,在 JAVA 中是否有任何编程方式可以将文件转换为 ORC 文件格式并对其执行 Snappy 压缩?
【问题讨论】:
假设我有一个 tsv 或 csv 文件,在 JAVA 中是否有任何编程方式可以将文件转换为 ORC 文件格式并对其执行 Snappy 压缩?
【问题讨论】:
BLOT - 这是一个 sn-p,而不是完整的代码。请将其用作参考并将其嵌入您的解决方案中。
遵循一组快速说明,您可以围绕它构建 MapReduce 代码。
在您的驱动程序类中,将输出格式类设置为 ORC。类似下面的东西[只是一个 sn-p,不是完整的代码]
Job = job = Job.getInstance(conf);
job.setOutputFormatClass(OrcOutputFormat.class);
FileOutputFormat.setOutputCompressorClass(job,SnappyCompressor.class);
public static class MyReducer extends Reducer<Text,IntWritable,NullWritable,OrcStruct> { private TypeDescription schema = TypeDescription.fromString("struct<key:string,ints:array<int>>"); // createValue creates the correct value type for the schema private OrcStruct pair = (OrcStruct) OrcStruct.createValue(schema); // get a handle to the list of ints private OrcList<IntWritable> valueList = (OrcList<IntWritable>) pair.getFieldValue(1); private final NullWritable nada = NullWritable.get(); public void reduce(Text key, Iterable<IntWritable> values, Context output ) throws IOException, InterruptedException { pair.setFieldValue(0, key); valueList.clear(); for(IntWritable val: values) { valueList.add(new IntWritable(val.get())); } output.write(nada, pair); } }
这将使您的数据以 ORC 格式写入,并在 HDFS 上使用 snappy 压缩编解码器。
【讨论】: