gpt4 book ai didi

google-cloud-dataflow - 非匿名 DoFn 中的访问端输入

转载 作者:行者123 更新时间:2023-12-01 14:45:08 29 4
gpt4 key购买 nike

如果我的类扩展了 DoFn,如何访问侧输入的元素?

例如:

假设我有一个 ParDo 变换,如:

PCollection<String> data = myData.apply("Get data",
ParDo.of(new MyClass()).withSideInputs(myDataView));

我有一个类:-

static class MyClass extends DoFn<String,String>
{
//How to access side input here
}

c.sideInput() 在这种情况下不起作用。

谢谢。

最佳答案

在这种情况下,问题在于 DoFn 中的 processElement 方法无法访问主方法中的 PCollectionView 实例。
您可以在构造函数中将 PCollectionView 传递给 DoFn:

class MyClass extends DoFn<String,String>
{
private final PCollectionView<..> mySideInput;

public MyClass(PCollectionView<..> mySideInput) {
// List, or Map or anything:
this.mySideInput = mySideInput;
}

@ProcessElement
public void processElement(ProcessContext c) throws IOException
{
// List or Map or any type you need:
List<..> sideInputList = c.sideInput(mySideInput);
}
}
然后在实例化它时将侧输入传递给类,并将其指示为侧输入,如下所示:
p.apply(ParDo.of(new MyClass(mySideInput)).withSideInputs(mySideInput));

对此的解释是,当您使用匿名 DoFn 时,process 方法有一个闭包,可以访问包含 DoFn 的范围内的所有对象(其中包括 PCollectionView)。当您不使用匿名 DoFn 时,没有闭包,您需要另一种传递 PCollectionView 的方法。

关于google-cloud-dataflow - 非匿名 DoFn 中的访问端输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45463061/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com