【问题标题】:parquet format HDFS writeparquet 格式 HDFS 写入
【发布时间】:2016-06-29 20:05:33
【问题描述】:

我正在尝试将一个巨大的 RDD 的 kafka 消息转换为 parquet 格式,并使用 spark 流保存在 HDFS 中。它是一条系统日志消息,例如每行中的 name1=value1|name2=value2|name3=value3,关于如何在 spark 流中实现这一点的任何指针?

【问题讨论】:

    标签: apache-kafka spark-streaming parquet


    【解决方案1】:

    只要您有 avro 架构,您就可以将 RDD 保存到 parquet 而不转换为 DataFrame

    这是一个示例函数:

    public <T> void save(JavaRDD<T> rdd, Class<T> clazz, Time timeStamp, Schema schema, String path) throws IOException {
        Job job = Job.getInstance();
        ParquetOutputFormat.setWriteSupportClass(job, AvroWriteSupport.class);
        AvroParquetOutputFormat.setSchema(job, schema);
        LazyOutputFormat.setOutputFormatClass(job, new ParquetOutputFormat<T>().getClass());
        job.getConfiguration().set("mapreduce.fileoutputcommitter.marksuccessfuljobs", "false"); 
        job.getConfiguration().set("parquet.enable.summary-metadata", "false"); 
    
        //save the file
        rdd.mapToPair(me -> new Tuple2(null, me))
                .saveAsNewAPIHadoopFile(
                        String.format("%s/%s", path, timeStamp.milliseconds()),
                        Void.class,
                        clazz,
                        LazyOutputFormat.class,
                        job.getConfiguration());
    }
    

    【讨论】:

    • 感谢大卫和塞巴斯蒂安,我尝试了大卫的方法,并且成功了,我想尝试 avro 的东西,但看起来这两种方法在内部做的一样,读取整个 rdd 并将其转换为镶木地板rows 或 avro objects to parquet,你们看到比其他的优势了吗?
    • 但是创建数据帧(转换类型等)有一些开销,您可以通过直接保存类似上述内容来克服这些开销。如果性能不是问题(比如不经常保存/大窗口),那么 oneliner 就可以了
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-17
      • 2017-01-05
      • 2018-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      相关资源
      最近更新 更多