擅长:python、mysql、java
<p>让我重新表述一下我认为你在问什么,如果我错了,请纠正我:</p>
<p>在MATLAB文件中有一个矩阵<code>V</code>,需要读入该矩阵,然后运行模拟的<code>N</code>试验。在</p>
<p><strong>编辑:<code>FileBasedSource</code>不能直接使用。我已经更正了下面的解释。</strong></p>
<p>apachebeam有内置的PTransforms来读取许多文件格式,但没有MATLAB文件。您需要创建自己的源实现并读取转换。有很多基于<code>FileBasedSource</code>的例子,比如<a href="https://github.com/apache/beam/blob/fd85372b377c78515a0fb4418353509532d8f841/sdks/python/apache_beam/io/tfrecordio.py#L181" rel="nofollow noreferrer">^{<cd5>}</a>和{a2}。在</p>
<p>Beam文档提供了实现新的I/O转换的技巧:<a href="https://beam.apache.org/documentation/io/authoring-overview/" rel="nofollow noreferrer">https://beam.apache.org/documentation/io/authoring-overview/</a></p>
<p>如果与源代码解耦,则添加置换逻辑将更简单。如果试验次数<code>N</code>是静态的或在管道构建过程中已知的,则可以使用<a href="https://beam.apache.org/documentation/sdks/pydoc/2.2.0/apache_beam.transforms.core.html?highlight=pardo#apache_beam.transforms.core.FlatMap" rel="nofollow noreferrer">FlatMap</a>和普通Python代码返回每个置换的iterable。所以你的逻辑看起来更像:</p>
<pre><code>(p | 'read' >> ReadFromMatlab(file_name)
| 'permute_v' >> beam.FlatMap(lambda x: permutation(x, N))
| ...)
</code></pre>