【问题标题】:Dataflow to read from Google Cloud storage to Local machine从谷歌云存储读取到本地机器的数据流
【发布时间】:2018-08-08 16:59:11
【问题描述】:

我尝试了一项数据流作业来从 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()));

【问题讨论】:

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


    【解决方案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 代码执行相同的操作。

    【讨论】:

    • 是的,我最终使用了云存储 API
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 2020-11-23
    • 2015-04-07
    • 2023-03-20
    相关资源
    最近更新 更多