提问者:小点点

从Google Cloud存储读取到本地机器的数据流


我尝试了一个数据流作业从谷歌云存储读取并写入本地机器。我使用了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个答案

匿名用户

这可能作为数据流作业工作的原因是为了输入和输出到云服务。

如果你想写入你的本地计算机,那么你可以使用一个简单的函数,它可以接受一个字符串输入并返回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
    }
}

如果你仍然无法使用上述方法实现这一点,那么我建议使用云存储API并使用python或PHP代码执行相同的操作。