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