我想使用 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"
下面的代码按照我想要的方式更新目录和数据库,但如果可能的话,我想通过 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 屏幕截图:
我也尝试过像你一样的方法:
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 关键字并且配置设置的格式不正确。
我已经尝试过以下方法:
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())
结果:
dbrx02
default