我正在尝试通过 Azure 数据工厂中的管道在作业集群上运行数据工程作业。它只是在笔记本中运行一些代码。
我遇到以下错误:
org.apache.spark.sql.connector.catalog.CatalogNotFoundException: Catalog 'my-catalog' plugin class not found: spark.sql.catalog.my-catalog is not defined
此错误发生在我的代码中的这一行:
_get_spark().sql(f"USE CATALOG `{self.catalog}`")
我对此的评估是正在启动的作业集群没有启用 Unity Catalog。
当我向下滚动到集群的标签部分时,我可以看到这一点(缺少 Unity Catalog 标签):
我该如何解决这个问题?
我想我所要做的就是在设置链接服务时将“其他集群设置”下的“Unity 目录访问模式”设置为“共享”?
我在这里缺少什么?
Apache Spark 中的 CatalogNotFoundException。
当Spark找不到指定的目录时,就会出现此错误。
您可以直接使用spark对象来代替
_get_spark()
。
我已尝试在下面列出可用的目录:
available_catalogs = spark.catalog.listCatalogs()
for catalog in available_catalogs:
print(catalog)
结果:
CatalogMetadata(name='adbrx02', description=None)
CatalogMetadata(name='hive_metastore', description=None)
CatalogMetadata(name='samples', description=None)
CatalogMetadata(name='system', description=None)
正如您提到的,错误发生在
_get_spark().sql(f"USE CATALOG
{self.catalog}")
您可以尝试以下方法:
spark.conf.set("spark.sql.catalog.adbrx02", "com.databricks.spark.catalog")
spark.sql("USE CATALOG adbrx02")
在上面设置目录配置并在 SQL 查询中使用目录。