Java Apache Beam字数计算示例在使用Spark Runner时失败

Java Apache Beam字数计算示例在使用Spark Runner时失败,java,linux,apache-spark,hdfs,apache-beam,Java,Linux,Apache Spark,Hdfs,Apache Beam,我一直在尝试使用ApacheBeam,作为初始测试的一部分,我一直在尝试运行word count示例。我一直在尝试Beam提供的MinimalWordCount示例。代码如下: PipelineOptions options = PipelineOptionsFactory.create(); Pipeline p = Pipeline.create(options); p.apply(TextIO.read().from("file:///tmp/shakespea

我一直在尝试使用ApacheBeam,作为初始测试的一部分,我一直在尝试运行word count示例。我一直在尝试Beam提供的MinimalWordCount示例。代码如下:

    PipelineOptions options = PipelineOptionsFactory.create();

    Pipeline p = Pipeline.create(options);

    p.apply(TextIO.read().from("file:///tmp/shakespeare.txt"))
            .apply("ExtractWords", ParDo.of(new DoFn<String, String>() {
                @ProcessElement
                public void processElement(ProcessContext c) {
                    for (String word : c.element().split(ExampleUtils.TOKENIZER_PATTERN)) {
                        if (!word.isEmpty()) {
                            c.output(word);
                        }
                    }
                }
            }))
            .apply(Count.<String>perElement())

            .apply("FormatResults", MapElements.via(new SimpleFunction<KV<String, Long>, String>() {
                @Override
                public String apply(KV<String, Long> input) {
                    return input.getKey() + ": " + input.getValue();
                }
            }))

            .apply(TextIO.write().to("file:///tmp/wordcounts/"));

    // Run the pipeline.
    p.run().waitUntilFinish();
}
PipelineOptions=PipelineOptionsFactory.create();
Pipeline p=Pipeline.create(选项);
p、 应用(TextIO.read().from)(“file:///tmp/shakespeare.txt"))
.apply(“摘录词语”,第页,共页(新DoFn)(){
@过程元素
公共void processElement(ProcessContext c){
for(字符串字:c.element().split(ExampleUtils.TOKENIZER_模式)){
如果(!word.isEmpty()){
c、 输出(字);
}
}
}
}))
.apply(Count.perElement())
.apply(“FormatResults”,MapElements.via(新的SimpleFunction()){
@凌驾
公共串应用(千伏输入){
返回input.getKey()+“:”+input.getValue();
}
}))
.apply(TextIO.write())到(“file:///tmp/wordcounts/"));
//运行管道。
p、 run().waitUntilFinish();
}
我们的想法是通过spark submit在本地运行它。以下是我的spark submit命令:

$SPARK_HOME/bin/SPARK submit--master local[2]--class test.beam.example.MyWordCount/local/playde-1.0.0-shade.jar--runner=SparkRunner--sparkMaster=local[2]

但是,它会继续失败,并在以下函数中出现NullPointerException:

TextIO.write()到(“file:///tmp/wordcounts/))

以下是堆栈跟踪:

线程“main”java.lang.NullPointerException中出现异常

位于org.apache.beam.sdk.io.FileSystems.matchNewResource(FileSystems.java:544)

如果可能,请访问org.apache.beam.sdk.io.FileBasedSink.ConvertToFileResource(FileBasedSink.java:213)

位于org.apache.beam.sdk.io.TextIO$TypedWrite.to(TextIO.java:679)

位于org.apache.beam.sdk.io.TextIO$Write.to(TextIO.java:997)

当我使用HDFS上的文件运行它时,会运行完全相同的代码。所以基本上是替换

hdfs://而不是文件:///

我需要在这里做更多的事情来指示beam在本地文件系统中查找文件吗