問題
當你執行Delta Lake時更新,刪除,或合並如果查詢在任何轉換中使用Python udf,則會失敗,出現以下異常:
AWS
java.lang.UnsupportedOperationException: Error in SQL statement: IllegalStateException: File (s3a://xxx/table1) to be rewrite not found among candidate files: s3a://xxx/table1/part-00001-39cae1b -9406- 49r2 -99fb-8c865516fbaa- c0001 . snapby .parquet . SQL statement: //xxx/table1 . IllegalStateException: File (s3a://xxx/table1) to be rewrite not found among candidate files刪除
Azure
java.lang.UnsupportedOperationException: Error in SQL statement: IllegalStateException: File (adl://xxx/table1) to be rewrite not found among candidate files: adl://xxx/table1/part-00001- 39cae1bbb -9406- 49r2 -99fb-8c865516fbaa- c0001 . snapby .parquet刪除
版本
此問題發生在Databricks運行時5.5及以下版本。
導致
三角洲湖內部依賴於input_file_name ()函數用於如下操作更新,刪除,合並。input_file_name ()類中使用該值時,返回空值選擇求值Python UDF的語句。更新調用選擇在內部,這將無法返回文件名並導致錯誤。Scala udf不會出現此錯誤。
解決方案
你有兩個選擇:
- 請使用Databricks Runtime 6.0或以上版本,其中包含此問題的解決方案:(火花- 28153)。
- 如果不能使用Databricks Runtime 6.0或以上版本,請使用Scala udf而不是Python udf。