apachebeam:Java:使用TextIO.write()中的变量将结果写入多个文件

apachebeam:Java:使用TextIO.write()中的变量将结果写入多个文件,java,google-cloud-platform,google-cloud-dataflow,apache-beam,Java,Google Cloud Platform,Google Cloud Dataflow,Apache Beam,需要将结果写入多个输出文件,并在运行时生成输出文件的名称 示例-阅读输入csv,该csv在每门课程中都有学生姓名和分数。输出文件中所有课程的分数总和与学生姓名相对应 场景1:输出结果为单个csv-这很简单 输入csv- ''' 身份证、姓名、物理、化学、数学、英语、生物、历史 1001,詹姆斯,56,60,78,67,50,70 1002,罗伯特,64,72,62,58,78,80 1003,尼娜,72,70,83,72,75,85 输出csv- Name,Total Robe

需要将结果写入多个输出文件,并在运行时生成输出文件的名称

示例-阅读输入csv,该csv在每门课程中都有学生姓名和分数。输出文件中所有课程的分数总和与学生姓名相对应

场景1:输出结果为单个csv-这很简单

输入csv-

'''

身份证、姓名、物理、化学、数学、英语、生物、历史

1001,詹姆斯,56,60,78,67,50,70

1002,罗伯特,64,72,62,58,78,80

1003,尼娜,72,70,83,72,75,85

输出csv-


    Name,Total
    Robert,414
    Nina,457
    James,381
代码片段-

    pipeline.apply(TextIO.read().from(options.getInputFilePath()))
                .apply(ParDo.of(new FilterHeaderFn(CSV_HEADER)))
                .apply(ParDo.of(new ComputeTotalScoresFn()))
                .apply(ParDo.of(new ConvertToStringFn()))
                .apply(TextIO.write().to(options.getOutputFilePath())
                .withHeader("Name,Total").withNumShards(1));
场景2:输出结果是多个文件,这样每个学生都有一个用他们的名字创建的文件,其中包含总分。注意-文件名是在运行时生成的。 范例-

Robert.csv => contains  414
Nina.csv => 457
James.csv => 381
我尝试在内部设置输出文件路径 代码片段-

`ProcessContext.getPipelineOptions().as(MyOptionClass.class).setOuputPath(output_path)`

但这不起作用。非常感谢您的帮助。

您可以使用来实现这一点,或者更通用的谢谢,我们将试用它。