如何使用pyspark.sql.SparkSession.builder.config(databricks)设置目录和数据库

问题描述 投票:0回答:1

我想使用 pyspark 创建一个 Spark 会话,并使用 Spark 配置更新会话的目录和数据库,这可能吗?

使用配置不起作用

我尝试使用

pyspark.sql.SparkSession.builder.config()
更新目录和会话,但它不起作用。我运行下面的代码和

from pyspark.sql import SparkSession
spark = SparkSession.builder \
    .appName("config_test") \
    .config(map={"spark.sql.defaultCatalog": "test_catalog", "spark.sql.catalog.spark_catalog.defaultDatabase": "test_db"}) \
    .getOrCreate()
spark.catalog.currentCatalog() #returns "hive_metastore"
spark.catalog.currentDatabase() #returns "default"

使用 session.catalog 确实有效

下面的代码按照我想要的方式更新目录和数据库,但如果可能的话,我想通过 Spark 配置来完成此操作。

spark = SparkSession.builder \
    .appName("without_config_test") \
    .getOrCreate()
spark.catalog.setCurrentCatalog("test_catalog")
spark.catalog.setCurrentDatabase("test_db")
spark.catalog.currentCatalog() #returns "test_catalog"
spark.catalog.currentDatabase() #returns "test_db"

下面是 databricks 的屏幕截图,显示了该问题,我使用的是版本 15.4 LTS w/ Spark 3.5.0 显示输出的 databricks 屏幕截图: Running the different methods in databricks

apache-spark pyspark databricks azure-databricks
1个回答
0
投票

我也尝试过像你一样的方法:

from pyspark.sql import SparkSession
spark = SparkSession.builder \
    .appName("config_test") \
    .config(map={"spark.sql.defaultCatalog": "dbrx02", "spark.sql.catalog.spark_catalog.defaultDatabase": "test_db"}) \
    .getOrCreate()
spark.catalog.currentCatalog() #returns "hive_metastore"
spark.catalog.currentDatabase()

结果:


'default'

目录通常在完全应用

.config()
中的配置之前初始化。 这意味着在任何自定义设置生效之前,默认目录(通常为
hive_metastore
)已加载并成为活动目录。 原因是不需要 map 关键字并且配置设置的格式不正确。

enter image description here

我已经尝试过以下方法:

from pyspark.sql import SparkSession
spark = SparkSession.builder \
    .appName("configcatalog") \
    .config("spark.sql.defaultCatalog", "dbrx02") \
    .config("spark.sql.catalog.dbrx02.defaultDatabase", "dbo2") \
    .getOrCreate()
print(spark.catalog.currentCatalog())  
print(spark.catalog.currentDatabase())

enter image description here

结果:

dbrx02
default
© www.soinside.com 2019 - 2024. All rights reserved.