gpt4 book ai didi

java - 使用 Snappy 压缩生成 ORC 文件格式

转载 作者:太空宇宙 更新时间:2023-11-04 10:42:24 28 4
gpt4 key购买 nike

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

最佳答案

BLOT - 这是一个片段,而不是完整的代码。请使用它作为引用并将其嵌入到您的解决方案中。

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

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

在驱动程序类中,将输出格式类设置为 ORC。类似下面的内容[只是一个片段,不是完整的代码]

Job = job = Job.getInstance(conf);
job.setOutputFormatClass(OrcOutputFormat.class);
FileOutputFormat.setOutputCompressorClass(job,SnappyCompressor.class);
  • 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);
    }
    }

    这应该让您的数据在 HDFS 上使用快速压缩编解码器以 ORC 格式写入。

    关于java - 使用 Snappy 压缩生成 ORC 文件格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48833201/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com