Flink:将带有CSV标头的元组写入文件

时间:2019-02-05 08:59:26

标签: csv dataset apache-flink

我使用Flink(带有Hadoop的1.7.1)进行了一些数据处理。最后,我想将包含2个元组的数据集写入文件中。目前,我正在这样做:

<Tuple2<Integer, Point>> pointsClustered = points.getClusteredPoints(...);
pointsClustered.writeAsCsv(params.get("output"), "\n", ",");

但是,我想将CSV标头写入第一行。 Flink's Javadoc API没有为此提供任何选项。此外,我找不到针对它的任何解决方案。

请问您如何做到这一点。非常感谢!

2 个答案:

答案 0 :(得分:2)

Flink自己的"C:\\Users\\tom\\source\\repos\\WebDemo\\StudentLib\\Reports\\StudentReport.rdlc" 不支持此功能。您可以做的是扩展CsvOutputFormat并覆盖CsvOutputFormat方法,该方法在打开格式时会写入标头。然后,您将使用open指定新创建的输出格式:

DataSet#output

答案 1 :(得分:0)

我可以通过简单地使用联合将标题行添加到数据集中来解决此限制。这样,第一行将始终是导出的标题行。

DataSet<Tuple8<String, String, String, String, String, String, String, String>> headers = env.fromElements(
            Tuple8.of(
                 "SDMId", "ActivityType", "ActionType", "ActivityId", "ActivityLevel", "Timestamp", "SessionId", "Value"
            ));

DataSet<Tuple8<String, String, String, String, String, String, String, String>> results =
            headers.union(skillResults);

results.writeAsCsv("file:///Users/karthsub/Desktop/first_export.csv", FileSystem.WriteMode.OVERWRITE).setParallelism(1);