Spark将Kafka InputDStream保存为Json文件

时间:2018-02-20 15:37:40

标签: java json apache-spark apache-kafka spark-streaming

我只是想知道Spark中是否有方法,所以我可以将JavaInputDStream保存为Json文件,或者通常保存为任何文件。 如果没有,是否还有其他可能保存的内容 一个kafka主题作为Spark中的文件。

非常感谢!

1 个答案:

答案 0 :(得分:0)

当您将JavaInputDStream映射到stream时,您可以执行以下操作:

stream.foreachRDD(rdd -> {
            OffsetRange[] offsetRanges = ((HasOffsetRanges) rdd.rdd()).offsetRanges();

            rdd.mapToPair(new PairFunction<ConsumerRecord<String, String>, String, String>() {
                @Override
                public Tuple2<String, String> call(ConsumerRecord<String, String> record) {
                    return new Tuple2<>(record.key(), record.value());
                }
            }).foreachPartition(partition -> {

                OffsetRange o = offsetRanges[TaskContext.get().partitionId()];
                System.out.println(o.topic() + " " + o.partition() + " " + o.fromOffset() + " " + o.untilOffset());

                if (partition.hasNext()) {

                    PrintWriter out = new PrintWriter("filename.txt");;
                    out.println(text);

                    try {
                        while (partition.hasNext()) {

                            Tuple2<String, String> message = partition.next();
                            out.println(message);
                        }

                    } catch (Exception e) {
                        e.printStackTrace(
                }

            });
        });
        ssc.start();
        ssc.awaitTermination();

请不要忘记,如果您的Kafka主题中有多个分区,那么按照上述方法,您将按照分区编写文件。