Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google bigquery google bigquery自定义项,用于jaro_winkle_距离_Google Bigquery - Fatal编程技术网

Google bigquery google bigquery自定义项,用于jaro_winkle_距离

Google bigquery google bigquery自定义项,用于jaro_winkle_距离,google-bigquery,Google Bigquery,下面是计算jaro_winkle_距离的UDF代码 当使用json测试数据测试它时,它似乎可以工作,但当我尝试在google bigquery UI中调用它时,它始终给我零分。 即使使用自连接,例如 输入: [ {a: "Liu",b:"Lau"}, {a: "John",b:"Jone"}] 输出: [ { "scr": 80 }, { "scr": 87 } ] SQL: 试试下面的方法。它按预期工作,结果如下 name1 name2 scr

下面是计算jaro_winkle_距离的UDF代码 当使用json测试数据测试它时,它似乎可以工作,但当我尝试在google bigquery UI中调用它时,它始终给我零分。 即使使用自连接,例如

输入:

[
 {a: "Liu",b:"Lau"},
 {a: "John",b:"Jone"}]
输出:

[
  {
    "scr": 80
  },
  {
    "scr": 87
  }
]
SQL:


试试下面的方法。它按预期工作,结果如下

name1   name2   scr  
Liu     Liu     100  
John    Jone     87  
Liu     Lau      80  
希望您能够将其放回外部lib文件:o)

和取消注释

//jaro_winkler.distance = function(a, b) {

//return Math.round(weight*100)
并在注释中添加
emit

jaro_winkler_distance=function(r, emit) {

emit(weight);

那你应该没事了

我尝试使用float64而不是int64,但它仍然不起作用。我们使用您给出的内联JavaScript示例,它起作用了。然而,我们尝试使用google存储并将javascript放在那里,而不是内联。看起来这样做是因为它要求emit-to-work-Error:ReferenceError:emit未在gs://kayama808/javascript/jaro\u winkler\u google\u UDF3.js第154行第4-5列定义。google bigquery上是否有在存储中使用javascript UDF的端到端示例。它在文档中显示了示例,但不包括JS代码。在测试工具中,它在javascript中使用emit。为什么谷歌不能直接使用JS UDF“原样”?我相信,测试工具是针对UDF的旧版本的-这是表值UDF-与标准中的标量UDF相比,我将使用lib进行检查/测试,但同时-您可以使用内联版本吗?还有我的jsbin来测试UDF JS代码。看起来不需要emit,正如您所说,为什么在测试工具中它将emit放在那里。
var a = r.a;
var b = r.b;
//jaro_winkler.distance = function(a, b) {

//return Math.round(weight*100)
jaro_winkler_distance=function(r, emit) {

emit(weight);