簡體   English   中英

具有編輯距離UDF引發錯誤的BigQuery查詢

[英]BigQuery Query with Edit Distance UDF Throws Error

我試圖使用比較距離算法在文章之間比較內容。 我在標准查詢中創建UDF。 當文章數較少(例如10篇文章,總比較為10X10 = 100)時,它可以正常工作。

如果文章總數很大,例如100(總比較是100 x 100 = 10000)。 BigQuery用戶界面會引發以下錯誤:

錯誤:發生內部錯誤,請求無法完成。 職位編號:報紙-142716:US.bquijob_cfbb316_161c359b4ec

我想知道是否是因為BigQuery在調用UDF時無法處理那么多數據。 “編輯距離”算法不是“便宜”的操作,原因可能也是嗎?

為此使用UDF是正確的方法嗎? 還有其他選擇嗎?

以下是我的UDF代碼:

 CREATE TEMPORARY FUNCTION editDistance(a STRING, b STRING) RETURNS FLOAT64 LANGUAGE js AS """ if(a.length == 0) return b.length; if(b.length == 0) return a.length; var matrix = []; // increment along the first column of each row var i; for(i = 0; i <= b.length; i++){ matrix[i] = [i]; } // increment each column in the first row var j; for(j = 0; j <= a.length; j++){ matrix[0][j] = j; } // Fill in the rest of the matrix for(i = 1; i <= b.length; i++){ for(j = 1; j <= a.length; j++){ if(b.charAt(i-1) == a.charAt(j-1)){ matrix[i][j] = matrix[i-1][j-1]; } else { matrix[i][j] = Math.min(matrix[i-1][j-1] + 1, // substitution Math.min(matrix[i][j-1] + 1, // insertion matrix[i-1][j] + 1)); // deletion } } } distance = matrix[b.length][a.length] return distance/Math.max(a.length, b.length) //return matrix[b.length][a.length]; """ ; 

我想知道是否是因為BigQuery在調用UDF時無法處理那么多數據。

您是對的-您工作的實際錯誤是

分配失敗-JavaScript堆內存不足

我想每篇文章都相當長,可能只有幾個KB,所以您在函數內部構建的matrix為幾個MB。 這種CROSS JOIN處理類型可能更適合於DataFlow或其他批處理工具。 要在BigQuery中執行此操作,您需要將表格分成較小的部分,或者將每篇文章作為其他查詢運行在其他每篇文章上(但這將導致多次掃描,而且代價很高)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM