何时加载自定义表目录?

qltillow  于 2021-05-29  发布在  Spark
关注(0)|答案(1)|浏览(577)

我在spark 3.0.0中创建了一个自定义目录: class ExCatalogPlugin extends SupportsNamespaces with TableCatalog 我提供了配置,要求spark加载目录: .config("spark.sql.catalog.ex", "com.test.ExCatalogPlugin") 但是spark从不加载插件,在调试过程中没有断点在插件内部被命中 initialize 方法,并且它公开的命名空间都不可识别。也没有记录错误消息。如果我将类名更改为无效的类名,也不会引发错误。
我编写了一个类似于spark代码中的测试用例的小测试用例,如果我调用:

package org.apache.spark.sql.connector.catalog
....
class CatalogsTest extends FunSuite {
    test("EX") {
        val conf = new SQLConf()
        conf.setConfString("spark.sql.catalog.ex", "com.test.ExCatalogPlugin")
        val plugin:CatalogPlugin = Catalogs.load("ex", conf)
    }
}
ergxz8rk

ergxz8rk1#

spark使用的是普通的延迟加载技术,在需要时才示例化定制的目录插件。
在我的例子中,引用插件有两种方法: USE ex ,此显式use语句导致spark查找目录并示例化它。
我有个同伴 TableProvider 定义为 class DefaultSource extends SupportsCatalogOptions . 这个类有一个硬编码的 extractCatalog 设置为 ex . 如果我为这个源创建一个读卡器,它会看到目录提供者的名称并将其示例化。然后它使用目录提供程序来创建表。

相关问题