我需要使用DeltaLog類在代碼中獲取addfile數據集。我必須保持在回購實現代碼並運行它在磚集群。
一些醫生說org.apache.spark.sql.delta.DeltaLog類,但似乎磚在運行時和我擺脫它NoClassDefFoundError: org/apache/spark/sql/delta/DeltaLog $當在集群上運行使用
= org.apache.spark.sql.delta.DeltaLog.forTable val文件(火花,路徑(db,表)).unsafeVolatileSnapshot .allFiles
當我使用提供配置為% %“io.delta三角洲核心”依賴,當我嚐試運行提供,有異常IllegalArgumentException:要求失敗:配置條目spark.databricks.delta.timeTravel.resolveOnIdentifier.enabled已經注冊!
磚https://kb.m.eheci.com/en_US/sql/find-size-of-table說使用com.databricks.sql.transaction.tahoe.DeltaLog但這類外io.delta包編譯問題的原因。我甚至不能定義jar(來源com.databricks.sql.transaction.tahoe.DeltaLog它明確導入我的構建。這段代碼在集群的工作
val deltaTable = deltaTable。forPath(火花,路徑)deltaTable.getClass.getMethod (deltaLog) .invoke (deltaTable) .asInstanceOf [com.databricks.sql.transaction.tahoe。DeltaLog] .snapshot .allFiles
但就像我說的我不能把它放在我的代碼,因為編譯問題
我如何使用我的代碼和DeltaLog集群上運行這段代碼的可能性嗎?
我能夠解決這個問題隻使用反射
val deltaTable = deltaTable。forPath(火花,路徑(數據庫、表))val deltaLog = deltaTable.getClass.getMethod (deltaLog) .invoke (deltaTable) val快照= deltaLog.getClass.getMethod (unsafeVolatileSnapshot) .invoke (deltaLog) val allFiles = snapshot.getClass.getMethod (allFiles) .invoke(快照).asInstanceOf [DataFrame]
但它將很好的解決依賴性問題,有可能DeltaLog使用三角洲api
我能夠解決這個問題隻使用反射
val deltaTable = deltaTable。forPath(火花,路徑(數據庫、表))val deltaLog = deltaTable.getClass.getMethod (deltaLog) .invoke (deltaTable) val快照= deltaLog.getClass.getMethod (unsafeVolatileSnapshot) .invoke (deltaLog) val allFiles = snapshot.getClass.getMethod (allFiles) .invoke(快照).asInstanceOf [DataFrame]
但它將很好的解決依賴性問題,有可能DeltaLog使用三角洲api