Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/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 作为数据流侧输入的大numpy矩阵_Google Cloud Dataflow_Apache Beam - Fatal编程技术网

Google cloud dataflow 作为数据流侧输入的大numpy矩阵

Google cloud dataflow 作为数据流侧输入的大numpy矩阵,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我试图用Python编写一个数据流管道,它需要一个大的numpy矩阵作为辅助输入。矩阵保存在云存储中。理想情况下,每个数据流工作者将直接从云存储加载矩阵 我的理解是,如果我说matrix=np.load(LOCAL\u PATH\u TO\u matrix),然后 p | "computation" >> beam.Map(computation, matrix) 矩阵从我的笔记本电脑运到每个Datflow工作人员 我该如何指示每个工作人员直接从云存储加载矩阵?“二进制blob”是

我试图用Python编写一个数据流管道,它需要一个大的numpy矩阵作为辅助输入。矩阵保存在云存储中。理想情况下,每个数据流工作者将直接从云存储加载矩阵

我的理解是,如果我说
matrix=np.load(LOCAL\u PATH\u TO\u matrix)
,然后

p | "computation" >> beam.Map(computation, matrix)
矩阵从我的笔记本电脑运到每个Datflow工作人员


我该如何指示每个工作人员直接从云存储加载矩阵?“二进制blob”是否有波束源?

您的方法是正确的

在本例中,数据流所做的是将NumPy矩阵作为一个侧输入进行处理。这意味着它从您的机器上传一次到服务,数据流服务将把它发送给每个工作者

由于矩阵很大,这将使您的工作人员使用I/O从服务接收矩阵,并承担将整个矩阵保存在内存中的负担,但它应该可以工作


如果您希望避免在计算机中计算/加载矩阵,您可以将矩阵作为文本文件上载到GCS,读入该文件,然后获取矩阵。您可以这样做:

matrix_file='gs://mybucket/my/matrix'
p | beam.ParDo(计算dofn(矩阵文件))
你的DoFn可能是这样的:

类计算DoFn(beam.DoFn):
def uuu init uuuu(自我,矩阵文件):
self.\u矩阵文件=矩阵文件
自身矩阵=无
def启动捆绑包(自身、元素):
#我们检查,因为一个DoFn实例可以重用
#对于不同的捆绑。
如果self.\u矩阵为无:
self.load_矩阵(self._矩阵文件)
def流程(自身、要素):
#现在处理元素
def加载矩阵(自身,矩阵文件):
#使用GCS API从GCS加载文件

我希望这是有道理的。如果您觉得需要更多帮助,我可以充实这些功能。

您的方法是正确的

在本例中,数据流所做的是将NumPy矩阵作为一个侧输入进行处理。这意味着它从您的机器上传一次到服务,数据流服务将把它发送给每个工作者

由于矩阵很大,这将使您的工作人员使用I/O从服务接收矩阵,并承担将整个矩阵保存在内存中的负担,但它应该可以工作


如果您希望避免在计算机中计算/加载矩阵,您可以将矩阵作为文本文件上载到GCS,读入该文件,然后获取矩阵。您可以这样做:

matrix_file='gs://mybucket/my/matrix'
p | beam.ParDo(计算dofn(矩阵文件))
你的DoFn可能是这样的:

类计算DoFn(beam.DoFn):
def uuu init uuuu(自我,矩阵文件):
self.\u矩阵文件=矩阵文件
自身矩阵=无
def启动捆绑包(自身、元素):
#我们检查,因为一个DoFn实例可以重用
#对于不同的捆绑。
如果self.\u矩阵为无:
self.load_矩阵(self._矩阵文件)
def流程(自身、要素):
#现在处理元素
def加载矩阵(自身,矩阵文件):
#使用GCS API从GCS加载文件

我希望这是有道理的。如果您觉得需要更多帮助,我可以充实这些功能。

有什么办法可以避免在我的机器上安装矩阵?工人们从云存储中获取矩阵了吗?我已经为此添加了一个策略。你不会使用边输入,尽管你也可以使用边输入。你如何将矩阵作为边输入加载?您会使用
AsSingleton
?我看不出还有什么别的办法,它在一维集合的意义上是不合适的。有没有办法避免矩阵出现在我的机器上?工人们从云存储中获取矩阵了吗?我已经为此添加了一个策略。你不会使用边输入,尽管你也可以使用边输入。你如何将矩阵作为边输入加载?您会使用
AsSingleton
?我看不出还有什么其他的办法,它在一维集合的意义上是不合适的。