Google Cloud Dataflow错误NoSuchMethodException:没有这样的函数

Pan*_*nda 5 javascript user-defined-functions nashorn google-cloud-platform google-cloud-dataflow

我正在使用数据流函数将 pubsub 消息转换为以字符串形式编写的 json 形式,以提交到具有正确架构的 bigquery 表中。

我使用以下 UDF 函数,我已经测试该函数在 google cloud shell 中可以正常工作。

function networkprocess(inJson) {
  data = JSON.parse(inJson);

  data ["Network_Details"] = JSON.parse(data["Network_Details"]);
  index = data["Network_Details"]["IpAddress"].indexOf(data["source_internal_ip"]);
  if (index == -1) {
      index = 0;
    }
  for (var key in data["Network_Details"]){
      data[key] = (data["Network_Details"][key][index]);
    }
  

  delete  data ["Network_Details"];
 return JSON.stringify(data);
}
Run Code Online (Sandbox Code Playgroud)

但是,此数据流作业不断将失败记录输出到失败记录表,并出现以下错误:

java.lang.NoSuchMethodException:在 org.openjdk.nashorn.api.scripting.ScriptObjectMirror.callMember(ScriptObjectMirror.java:192) 处没有此类函数网络进程......

…………很多“at”指针……

我尝试从头开始创建新的 UDF,并在作业设置期间(在 GUI 中)单击“创建 UDF”时使用 google 提供的标准功能,这只是:

function process(inJson) {

 return JSON.stringify(data);
}
Run Code Online (Sandbox Code Playgroud)

它们都返回相同的错误,即找不到该函数。

我通过 GUI 或 terraform 部署它,但结果相同。

小智 2

不知何故,该函数似乎未正确加载。

您将 JavaScript 文件保存在 GCS 存储桶中,并使用正确的路径指向它?

Dataflow 中使用的服务帐户是否具有正确的权限集来获取该文件?