我正在尝试制作一个接受侧面输入的自定义转换类,并且正在使用PipelineTester和PAssert对其进行测试,但在尝试引入转换的方法上却始终没有此类方法异常来自其他班级。
原因:java.lang.NoSuchMethodError: com.org.utils.MyUtils.createMap(Ljava / lang / Iterable;)Ljava / util / Map; 在com.org.beam.MyTransform.ProcessElement(MyTransform.java:51)
我尝试使用@Autowired注释引入类似的类
@Autowired
private MyUtils myutils;
以及仅使用类似代码的静态实例
private static MyUtils myUtils = new MyUtils();
然后致电
this.myUtils.createMap(mapThisToThat(inputCollection, this.myMap));
我还尝试过使方法静态化并像调用它们一样
MyUtils.createMap(mapThisToThat(inputCollection, this.myMap));
mapThisToThat的签名是
private Iterable<MyObject> mapThisToThat(Iterable<MyObject> objectIterator, Map<String, Integer> myMap) {
传递给具有此签名的createMap方法-
public Map<String, MyObject> createMap(Iterable<MyObject> inputCollection){
因此它正确地传递了MyObjects的Iterable,但是它说该方法由于某种原因不存在。这是否意味着光束变换不能使用外部方法,或者我做错了什么?
答案 0 :(得分:1)
对于我在python中来说,要使其正常工作,我需要做很多事情:
https://cloud.google.com/dataflow/faq#how-do-i-handle-nameerrors https://beam.apache.org/documentation/sdks/python-pipeline-dependencies/
对于您在Java中来说,由于某种原因,他们没有相互的文档,但在这里https://beam.apache.org/documentation/runners/dataflow/他们说这样的话:
在某些情况下,例如使用调度程序(例如Apache AirFlow)启动管道,您必须具有独立的应用程序。除了在上一节中显示的添加现有依赖关系之外,还可以通过在pom.xml的Project部分上显式添加以下依赖关系来打包自执行JAR。
在他们的示例自述文件https://github.com/mbrukman/apache-beam/tree/master/examples/java中,他们这样说
或者,您可以选择将所有依赖项捆绑到一个JAR中,然后在Maven环境之外执行它。例如,您可以执行以下命令来创建示例的捆绑JAR,并在本地和Cloud Platform中执行
如果继续浏览该示例存储库,将存在一个包含utils的common
文件夹。希望您可以复制他们的操作方式。