【问题标题】:Generate ORC file format with Snappy compression使用 Snappy 压缩生成 ORC 文件格式
【发布时间】:2018-07-27 17:48:53
【问题描述】:

假设我有一个 tsv 或 csv 文件,在 JAVA 中是否有任何编程方式可以将文件转换为 ORC 文件格式并对其执行 Snappy 压缩?

【问题讨论】:

    标签: java snappy orc


    【解决方案1】:

    BLOT - 这是一个 sn-p,而不是完整的代码。请将其用作参考并将其嵌入您的解决方案中。

    遵循一组快速说明,您可以围绕它构建 MapReduce 代码。

    1. 在 Driver 类中设置输出格式和压缩编解码器

    在您的驱动程序类中,将输出格式类设置为 ORC。类似下面的东西[只是一个 sn-p,不是完整的代码]

    Job = job = Job.getInstance(conf);
    job.setOutputFormatClass(OrcOutputFormat.class);
    FileOutputFormat.setOutputCompressorClass(job,SnappyCompressor.class);
    
    1. reducer 需要创建要放入 ORC 文件的 Writable 值,通常使用 OrcStruct.createValue(TypeDescription) 函数。对于我们的示例,假设 shuffle 类型是上一节中的 (Text, IntWritable),reduce 应该将每个键的整数收集在一起并将它们写成一个列表。输出模式将是 struct>。与 MapReduce 一样,如果您的方法存储了值,则需要在获取下一个值之前复制它们的值。
    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 压缩编解码器。

    【讨论】:

      猜你喜欢
      • 2016-08-20
      • 2015-06-02
      • 2016-06-22
      • 2017-02-02
      • 2016-06-24
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      相关资源
      最近更新 更多