数据流从Google Cloud存储读取到本地计算机

时间:2018-08-08 16:59:11

标签: google-cloud-dataflow apache-beam dataflow beam

我尝试了一个数据流作业,以从Google云存储中读取数据并写入本地计算机。我使用了DirectPipelineRunner。作业成功完成。但是我看不到本地计算机中写入的文件。我应该指定任何ip /主机名以及与输出位置参数相对应的本地位置吗?我如何在本地计算机上指定位置?

下面的命令:

gcloud dataflow jobs run sampleJobname1 --gcs-location gs://bucket/templatename1 --parameters inputFilePattern=gs://samplegcsbucket/abc/*,outputLocation=C:\data\gcp\outer,runner=DirectPipelineRunner

代码:

PCollection<String>  textData =pipeline.apply("Read Text Data", TextIO.read().from(options.getInputFilePattern()));
    textData.apply("Write Text Data",TextIO.write().to(options.getOutputLocation()));

1 个答案:

答案 0 :(得分:1)

之所以可能将其用作数据流作业,是为了将其输入和输出到云服务。

如果要写入本地计算机,则可以使用一个简单函数,该函数可以输入字符串并返回Void。在这里,您可以编写自定义Java代码以将文件保存在本地计算机中。您必须使用directrunner运行此数据流。

@SuppressWarnings("serial")
public static class SaveFileToLocal extends SimpleFunction<String>, Void> {

    @Override
    public KV<String, String> apply(KV<String, Iterable<String>> input) {

        String file_contents : input.getValue()

        // CODE TO WRITE THE TEXT TO LOCAL PATH
    }
}

如果您仍然无法使用上述方法实现这一目标,那么我建议您使用Cloud Storage API,并使用python或PHP代码执行相同的操作。