出于调试目的,我希望能够将无界 PCollection 转换为有界 PCollection。有直接的方法吗?在我看来,这样做可以强制管道完成,除其他外,将是有用的。
我认为 Sample.any() (这里的Javadoc:https ://beam.apache.org/documentation/sdks/javadoc/2.5.0/org/apache/beam/sdk/transforms/Sample.html#any-long- ) ,将是我所需要的,但 PTransform 似乎并没有改变管道的边界。
编辑:我尝试了the-hbar-tender的建议,但无法使其工作。我是这样尝试的:
BoundedReadFromUnboundedSource brfus = unbounded.withMaxNumRecords(10);
Run Code Online (Sandbox Code Playgroud)
...无界会像这样创建:
Read.Unbounded unbounded = new Read.Unbounded("some name", pubsubUnboundedSource);
Run Code Online (Sandbox Code Playgroud)
... pubsubUnboundedSource 的创建方式如下:
PubsubUnboundedSource pubsubUnboundedSource = PubsubUnboundedSource(pubsubClientFactory, projectValueProvider, topicValueProvider, subscriptionValueProvider, "some timestamp attribute", "some id attribute", true)
Run Code Online (Sandbox Code Playgroud)
...但是 pubsubClientFactory 无法实例化,因为 PubsubClient 不是公共的。我在那里放弃了。也许还有另一种方法可以解决这个问题。
使用 Python Pint,当乘以相同数量的单位时,我得到了一个奇怪的结果。你可能期望它们会合并,但事实并非如此。例如:
from pint import UnitRegistry
units = UnitRegistry()
Run Code Online (Sandbox Code Playgroud)
然后:
(3 * units.m) * ( 5 * units.m)
Run Code Online (Sandbox Code Playgroud)
... 结果是:
<Quantity(15, 'meter ** 2')>
Run Code Online (Sandbox Code Playgroud)
... 哪个是对的。但如果我将其中一个因素转换为毫米,如下所示:
(3 * units.m) * ( 5000 * units.mm)
Run Code Online (Sandbox Code Playgroud)
...它给出了一个无意义的答案:
<Quantity(15000, 'meter * millimeter')>
Run Code Online (Sandbox Code Playgroud)
同样的事情也会发生在除法以及其他维度上,比如质量、时间等。
但是,加法确实有效:
(3 * units.m) + ( 5000 * units.mm)
<Quantity(8.0, 'meter')>
Run Code Online (Sandbox Code Playgroud)
有人知道这是什么一回事吗?