我尝试了一个数据流作业来读取Google云端存储并写入本地计算机。我使用了DirectPipelineRunner。工作顺利完成。但我没有看到我的本地机器上写的文件。我应该指定任何ip / hostname以及与输出位置参数对应的本地位置吗?我如何在本地机器中指定位置?
命令如下:
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()));
这可能作为数据流作业的原因是为了输入和输出到云服务。
如果你想写入本地机器,那么你可以使用一个简单的函数,它可以输入字符串并返回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代码执行相同的操作。