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