镶木地板格式HDFS写

时间:2016-03-14 16:48:40

标签: apache-kafka spark-streaming parquet

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

2 个答案:

答案 0 :(得分:2)

只要您拥有RDD架构,就可以将DataFrame保存到镶木地板,而无需转换为avro

这是一个示例函数:

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());
}

答案 1 :(得分:1)

首先convert the RDD to a DataFrame。然后是save