Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud dataflow 访问数据流管道内的文件_Google Cloud Dataflow_Apache Beam_Dataflow_Apache Beam Io - Fatal编程技术网

Google cloud dataflow 访问数据流管道内的文件

Google cloud dataflow 访问数据流管道内的文件,google-cloud-dataflow,apache-beam,dataflow,apache-beam-io,Google Cloud Dataflow,Apache Beam,Dataflow,Apache Beam Io,我想在管道启动之前将某些文件从下载到临时位置。文件.mmdb文件将在ParDo功能中读取。文件存储在Google存储中,但使用.mmdb文件的方法要求它们是文件(java.io)对象 如果我将其包含在--filesToStage中,它们将作为InputStream提供 在拉链里面。我想以文件而不是InputStream的形式访问它们。 实现这一目标的最佳方式是什么 我目前正在下载ParDo设置中工作人员的临时文件夹中的文件。这是一个非常广泛和高层次的问题。答案取决于使用文件的逻辑文件表示一个临时

我想在管道启动之前将某些文件从下载到临时位置。文件.mmdb文件将在ParDo功能中读取。文件存储在Google存储中,但使用.mmdb文件的方法要求它们是文件(java.io)对象

如果我将其包含在--filesToStage中,它们将作为InputStream提供 在拉链里面。我想以文件而不是InputStream的形式访问它们。 实现这一目标的最佳方式是什么


我目前正在下载ParDo设置中工作人员的临时文件夹中的文件。

这是一个非常广泛和高层次的问题。答案取决于使用文件的逻辑<代码>文件表示一个临时文件夹,因此,如果您有一个组件要求输入是
文件
的实例,则将其本地写入临时文件夹是正确的。Beam并没有为这种情况提供更好的抽象

不过,我建议您考虑更新当前处理
文件的逻辑,以接受其他类型的输入。您可能遇到了由于缺乏关注点分离和紧密耦合而导致的问题。也就是说,您有一个组件,它接收
文件
,打开它,在打开它时处理错误,读取它,解析其中的数据,甚至可能验证和处理数据。所有这些都是单独的问题,可能应该由单独的组件处理,您可以在需要时将这些组件组合在一起并替换,例如:

  • 一个知道如何处理文件系统并将路径转换为字节流的类
  • 类似的类,知道如何处理通过http(例如GCS用例)获取文件并将其转换为字节流
  • 知道如何将字节流解析为数据的组件
  • 处理解析数据的组件
  • 其他东西可能生活在任何地方
通过这种方式,您可以轻松地为组件实现任何其他源,独立地编写和测试它们


例如,您可以将您的逻辑实现为两个连接的
PCollection
,其中一个将直接从GCS位置读取、解析文本行,并在实际业务逻辑中进行处理,然后再将其与另一个
PCollection

连接。这是一个非常广泛和高层次的问题。答案取决于使用文件的逻辑<代码>文件
表示一个临时文件夹,因此,如果您有一个组件要求输入是
文件
的实例,则将其本地写入临时文件夹是正确的。Beam并没有为这种情况提供更好的抽象

不过,我建议您考虑更新当前处理
文件的逻辑,以接受其他类型的输入。您可能遇到了由于缺乏关注点分离和紧密耦合而导致的问题。也就是说,您有一个组件,它接收
文件
,打开它,在打开它时处理错误,读取它,解析其中的数据,甚至可能验证和处理数据。所有这些都是单独的问题,可能应该由单独的组件处理,您可以在需要时将这些组件组合在一起并替换,例如:

  • 一个知道如何处理文件系统并将路径转换为字节流的类
  • 类似的类,知道如何处理通过http(例如GCS用例)获取文件并将其转换为字节流
  • 知道如何将字节流解析为数据的组件
  • 处理解析数据的组件
  • 其他东西可能生活在任何地方
通过这种方式,您可以轻松地为组件实现任何其他源,独立地编写和测试它们


例如,您可以将逻辑实现为两个连接的
PCollections
,其中一个将直接从GCS位置读取,解析文本行,并在实际业务逻辑中对其进行处理,然后再将其与另一个
PCollection

连接起来。我想我了解您正在/正在尝试做什么,我也希望这样做

这对我很有用(在DoFn的setup()方法中):


我想我理解你正在/正在尝试做的事情,我也希望这样做

这对我很有用(在DoFn的setup()方法中):


理想情况下,每个工作人员必须读取此文件一次。管道的输入是pub/sub。我对你的问题有点困惑,但是你是否看到这个文件必须为每个工作人员读取一次。管道的输入是pub/sub。我对你的问题有点困惑,但是你看到了吗
 if(not FileSystems.exists(local_db_location) ):
        with FileSystems.open(  self._cloud_database_loc ) as af:
            with FileSystems.create(local_db_location) as local_file:
                try:
                    shutil.copyfileobj(af,local_file,length=131072)
                except:
                    raise
    else:
        #DB exists